我有以下循环。它应该读取数字,直到EndOfFile,或者用户输入-999
int arr[100];
int index;
for (index = 0; index < 100; index++)
{
cin >> arr[index];
if (!cin)
{
cin.clear();
index--;
continue;
}
if (arr[index] == -999)
{
break;
}
}当用户输入一个无效的东西时,比如一些char,这个循环将永远重复,而不会进入错误状态或停止。
发布于 2011-09-14 16:22:26
在调用clear之后,您还必须以某种方式从流中删除无效输入。这里有一种方法:
cin >> arr[index];
if (!cin)
{
cin.clear();
std::string ignoreLine; //read the invalid input into it
std::getline(cin, ignoreLine); //read the line till next space
index--;
continue;
}这是因为当cin无法读取无效输入时,它会保留在流中。通过某种方式,它必须被移除。我只是读了之后就忽略了它。
您还可以将ignore用作:
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),' ');在我看来,如果输入是空格分隔的(如果您不想检查无效的输入),哪一个更好。online doc说:
istream::ignore
istream& ignore(流大小n= 1,int delim = EOF );
提取和丢弃字符
从输入序列中提取字符并将其丢弃。
当n个字符已被提取并丢弃时或当找到字符delim时,提取结束,以先出现的为准。在后一种情况下,delim字符本身也会被提取出来。
https://stackoverflow.com/questions/7413247
复制相似问题