Input With Spaces正在阻塞下一个输入(使用cin)



我在C++中处理输入流时遇到了一个有趣的问题。

我知道,如果您尝试使用cin输入一个包含空格的字符串,它会在第一个空格处截断该字符串,除非您使用getline来获取该字符串。

然而,我发现可能会出现更多意想不到的结果。。。如果在第一个输入之后有第二个cin,并且第一个cin的输入中有空格,则会跳过第二个输入,并对其值进行重击!

为什么会发生这种情况

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string myString;
    int myInt;
    // I know this will cut off the end of the string
    cout << "Enter a string with spaces: ";
    cin  >> myString;
    cout << endl;
    cout << "Enter an integer: ";
    cin  >> myInt;
    cout << endl;
    cout << "String: " << myString << endl;
    cout << "Int   : " << myInt    << endl;
    return 0;
}

输出:

Enter a string with spaces: This is a string
Enter an integer:
String: This
Int   : -858993460

有没有办法捕捉这个错误,这样无知的用户就不会输入带空格的字符串并破坏整个程序

cin读取不会读取整行,然后只返回其中的一部分。从概念上讲,它读取一个"token",通常理解为空白分隔的字符串,然后将其解析为您正在读取的任何类型。它没有"线"的概念。所有输入行都是一个连续的令牌流。因此,在读取字符串("This")后,下一个标记是"is",当然不能将其解析为int,因此也不能将错误解析为int。

最新更新