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

时间:2016-07-20 10:28:08

标签: c++

#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 = 

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

3 个答案:

答案 0 :(得分:2)

你有一个&#39; \ n&#39;在流中,所以getline读取空行。 写:

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

更新:

您可以使用更柔和的版本:

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

你可以在有意义的()函数中包含一些测试,例如,包含更多的空格。

答案 1 :(得分:0)

getline()被调用时,'\n'处有未读cin

之后未读
cin >> d2;

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

答案 2 :(得分:0)

你有一个未读的换行符,所以你的getline会读取一个空行。

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

解决了这个问题。