说我有:
int lol;
cout << "enter a number(int): ";
cin >> lol
cout << lol;
如果我输入5然后它就会输出5.如果我键入fd它会输出一些数字。 我怎样才能指定值,比如说我只想要一个int?
答案 0 :(得分:7)
如果您输入fd
,它会输出一些数字,因为这些数字是lol
在分配之前恰好具有的数字。 cin >> lol
不会写入lol
,因为它没有可接受的输入,所以它只是不管它而且值是调用之前的值。然后输出它(即UB)。
如果您想确保用户输入了可接受的内容,您可以将>>
打包在if
中:
if (!(cin >> lol)) {
cout << "You entered some stupid input" << endl;
}
此外,您可能希望在读取之前分配给lol
,这样如果读取失败,它仍然具有一些可接受的值(并且不能使用UB):
int lol = -1; // -1 for example
例如,如果你想循环直到用户给你一些有效的输入,你可以做
int lol = 0;
cout << "enter a number(int): ";
while (!(cin >> lol)) {
cout << "You entered invalid input." << endl << "enter a number(int): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
// the above will loop until the user entered an integer
// and when this point is reached, lol will be the input number