读取字符串直到C ++中没有getline的新行

时间:2017-12-02 15:44:42

标签: c++

我一直在尝试制作一个程序,要求我读取符号直到换行。我看到很多人在类似问题上提出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

我输出后输出我按回车键。那么有没有办法利用这个优势,只需要一行输入?

1 个答案:

答案 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?