【问题标题】:How to use cin and getline properly in a loop? [duplicate]如何在循环中正确使用 cin 和 getline? [复制]
【发布时间】:2025-12-11 14:50:02
【问题描述】:

我想编写一个程序,它读取一行和一个字符,然后将它们一起打印出来。这是我的代码:

#include <string>
#include <iostream>
using namespace std;
int main() {
  string s;
  string a;
  while (getline(cin,s)) {
    cin>>a;
    cout<<s<<a<<endl;
  }
}

我第一次输入:“abc d”作为一行,然后“a”作为一个字符, 输出是“abc da”。 但后来我又输入“abc d”,它立即输出“abc”,而不是等我输入“a”再输出“abc da”。我的代码哪里错了?

【问题讨论】:

  • 那是因为在&gt;&gt; a 之后有一个未使用的换行符,下一个getline 读取为空行。同一个问题有很多重复的问题。
  • 这里sa的用法有什么区别?
  • 您能告诉我如何避免这种情况吗?

标签: c++


【解决方案1】:

cin&gt;&gt;a; 之后,缓冲区中仍有一个换行符,然后由getline() 读取。为避免这种情况,您需要将换行符从缓冲区中清除。这可以通过调用cin.ignore() 和在某些情况下调用cin.sync() 来实现,尽管我不确定cin.sync() 函数的确切功能。

【讨论】: