getline(cin, string_name) 之前需要 cin.get()
Posted
技术标签:
【中文标题】getline(cin, string_name) 之前需要 cin.get()【英文标题】:Need of cin.get() before getline(cin, string_name) 【发布时间】:2017-04-09 21:19:30 【问题描述】:我有一个简单的程序来输出 2 个整数的总和,加倍并连接 2 个字符串。这是我运行良好的代码:
int main()
int i = 4;
double d = 4.0;
string s = "HackerRank ";
// Declare second integer, double, and String variables.
int i2;
double d2;
string s2;
// Read and save an integer, double, and String to your variables.
cin>>i2;
cin>>d2;
cin.get();
getline(cin, s2);
// Print the sum of both integer variables on a new line.
cout<<i+i2<<endl;
// Print the sum of the double variables on a new line.
cout<< setprecision(1)<<fixed<<d+d2<<endl;
// Concatenate and print the String variables on a new line
// The 's' variable above should be printed first.
cout<<s+s2;
return 0;
但是,如果我删除语句cin.get()
,则字符串s2
的输入不会发生。为什么会这样??
我认为这与流/输入缓冲区和 getline(cin, ) 的内部编码有关。此外,当我使用 cin.getline()
时,程序会出错。
【问题讨论】:
Using getline(cin, s) after cin的可能重复 【参考方案1】:试试:
cin.ignore();
然后
getline(cin, s2);
cin.ignore();
这将刷新输入流。
【讨论】:
以上是关于getline(cin, string_name) 之前需要 cin.get()的主要内容,如果未能解决你的问题,请参考以下文章
cin,cin.get(),cin.getline(),getline()
使用 `cin >> n;` 后使用 `getline(cin, s);`