在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
有没有办法捕获此错误,以便无知的用户不输入带空格的字符串并破坏整个程序?
答案 0 :(得分:0)
从cin
读取不会读取整行,然后只返回部分内容。从概念上讲,它读取一个“标记”,通常被理解为一个以空格分隔的字符串,然后将其解析为您正在阅读的任何类型。它没有“线”的概念。所有输入行都是一个连续的令牌流。因此,在读取一个字符串(“This”)之后,下一个标记是“is”,当然不能将其解析为int,从而导致错误。