我是C++新手,我正在使用2015。
cin不是在"Please enter another integer:\n"之后等待输入,而是每次输出"You entered 0"。
我已经在互联网上搜索了一个多小时,没有一个解决方案。cin.ignore()的组合不起作用。为什么cin缓冲区仍未清除?
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vals;
int val = 0;
int n = 0;
cout << "Please enter some integers (press a non-numerical key to stop)\n";
while (cin >> val)
vals.push_back(val);
cin.ignore(INT_MAX, '\n');
cin.ignore();
cout << "Please enter another integer:\n";
cin.ignore();
cin >> n;
cout << "You entered " << n;
system("pause");
return 0;
}发布于 2016-12-18 20:10:06
问题在于用户退出循环时,需要将cin置于失败状态。这就是为什么你
while(cin >> val){ .... }起作用了。
如果处于失败状态,cin将不再为您提供输入,因此您需要清空()失败状态。您还需要忽略()最初触发失败状态的以前的非整数响应。
使用它也是有价值的。
if(cin >> n){
cout << "You entered " << n;
}这将断言为n提供了适当的输入。
发布于 2016-12-18 20:09:59
程序中的问题是,它需要整数,而用户可以输入任何东西,比如一个非整数字符。
一个更好的方法,你似乎想做的是,一个一个字符,忽略空格,如果它是一个数字,然后继续阅读得到整个数字,否则停止循环。然后,您可以阅读所有字符,直到您到达'\n',并对一个数字执行相同的操作。在这样做的同时,对于每个字符,您应该检查流中仍然有cin.eof()中的字符。
另外,您可以通过在终止应用程序之前请求最后一个字符来防止命令行窗口关闭,而不是使用system(“暂停”)。
发布于 2016-12-18 20:28:40
试着得到这样的整数:
#include <sstream>
...
fflush(stdin);
int myNum;
string userInput = "";
getline(cin, userInput);
stringstream s (userInput);
if (s >> myNum) // try to convert the input to int (if there is any int)
vals.push_back(myNum);如果没有sstream,就必须使用try catch,这样当输入不是整数时,程序就不会崩溃。
https://stackoverflow.com/questions/41212202
复制相似问题