读取双值后无法读取包含空格的字符串

Not able to read a string containing spaces after reading a double value

本文关键字:读取 空格 字符串 包含      更新时间:2023-10-16
#include <iostream>
#include <iomanip>
#include <limits>
using namespace std;
int main() {
    int i2 = 0;
    double d2 = 0.0;
    string s2;
    cin >> i2;
    cin >> d2;
    getline(cin, s2);
    cout << "Integer = " << i2 << endl;
    cout << "Double = " << d2 << endl;
    cout << "String = " << s2 << endl;
}

我正在尝试将样本输入为:

12
3.4
Coding

预期输出:

Integer = 12
Double = 3.4
String = Coding

实际输出

Integer = 12
Double = 3.4
String = 

如上面的实际输出所示,在从上面输入前两个输入后,按下回车键的那一刻,它不接受我想要给出的下一个输入。

流中有一个'\n',所以getline读取空行。写入:

cin >> d2:
cin.ignore(); // new line
getline(cin,s2);

更新:

你可以使用一个更复杂的版本:

cin >> d2;
cin.ignore(); // removes separator
while (cin && !meaningful(s2))
  getline(cin,s2);

可以在meaningful((函数中包含一些测试,例如,包含更多的空白。

调用getline()时,在cin处有未读的'n',在之后未读

cin >> d2;

所以getline()只读取一个空字符串。

您有一个未读的换行符,因此您的getline将读取一个空行。

while(s2.empty())
{
    getline(cin, s2);
}

解决了这个问题。