我一直在尝试制作一个程序,要求我读取符号直到换行。我看到很多人在类似问题上提出getline()
,但是
我想知道是否有其他方法可以做到这一点,主要是因为我的代码到目前为止的工作方式。
#include <iostream>
#include <string>
int main()
{
std::string str;
while(true)
{
std::cin >> str;
std::cout << str << " ";
//some actions with token
}
}
我对这段代码感兴趣的是它首先读取所有输入,然后当我按Enter时,它会全部写入,例如,如果我输入
1 2 3 a b c
我输出后输出我按回车键。那么有没有办法利用这个优势,只需要一行输入?
答案 0 :(得分:0)
您正在查看输入到期后的输出行为,很可能是在刷新缓冲区之后。在大多数情况下,我都知道,这只是您与终端的stdout
进行交互的工件,并且不应该改变stdin
的读取方式。
你最好的选择绝对是istream::getline
,它在C++ Reference上有一个很好的例子:
// istream::getline example
#include <iostream> // std::cin, std::cout
int main () {
char name[256], title[256];
std::cout << "Please, enter your name: ";
std::cin.getline (name,256);
std::cout << "Please, enter your favourite movie: ";
std::cin.getline (title,256);
std::cout << name << "'s favourite movie is " << title;
return 0;
}
有关缓冲区刷新的更多信息,我发现了一个不错的SO问题:What does flushing the buffer mean?