输入空格是下一个输入(使用cin)

时间:2015-11-18 14:40:25

标签: c++ stream 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

输出:

TypeError: this.slideshow is undefined

有没有办法捕获此错误,以便无知的用户不输入带空格的字符串并破坏整个程序?

1 个答案:

答案 0 :(得分:0)

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