我在阅读中发现了这个......
while(!(std::cin >> array[i]))
{
std::cin.clear();
while(std::cin.get()!= '\n')
continue;
std::cout << "enter a new input: ";
}
而且,我真的不明白错误处理是如何工作的。使用std::cin.clear()
但代码继续从下一行的cin对象获取字符,然后使用continue语句。如果它没有清除cin,那么它究竟做了什么呢?谢谢。
答案 0 :(得分:3)
.clear()
清除cin
中的错误标记。例如,如果输入无法转换,则会设置它们。设置任何错误标志时,从cin
提取输入将无声地失败。
答案 1 :(得分:1)
clear
函数为错误控制状态设置新值。
考虑以下示例:
// clearing errors
#include <iostream>
#include <fstream>
using namespace std;
int main () {
char buffer [80];
fstream myfile;
myfile.open ("test.txt",fstream::in);
myfile << "test";
if (myfile.fail())
{
cout << "Error writing to test.txt\n";
myfile.clear();
}
myfile.getline (buffer,80);
cout << buffer << " successfully read from file.\n";
return 0;
}
在上面的示例中,myfile为输入操作打开,但只对其执行输出操作,因此设置了failbit。然后该示例调用clear以删除该标志,并允许在myfile上成功执行更多操作,如getline。
参考:ios::clear
答案 2 :(得分:1)
cin.clear()的作用是清除cin流的错误标志。当它执行此操作时,cin流操作可以继续。下一行从流中提取一个字符并返回它。 要理解循环的作用,请考虑以下情况:
假设数组的类型为int,并输入:abc然后按Enter键。 cin标识字符串输入不能进入int数组。所以它返回false并设置错误标志。当你执行cin.clear()时它会重置错误标志,以便继续进一步的操作(cin.get()可以工作)。现在cin.get()从中提取一个流。因为它不等于'\ n',所以循环继续(第二循环)直到它提取'\ n'=&gt;意思是你输入的错误的i / p都被冲走了你可以重新开始
答案 3 :(得分:0)
while(!(std::cin >> array[i]))
{
std::cin.clear(); //clears any error flags on cin so get() works
while(std::cin.get()!= '\n') //in case white space is in the stream
{ //loop until the end of line character
continue;
}
std::cout << "enter a new input: ";
}
评论中的信息。