使用cin>>错误处理

时间:2011-06-20 07:38:16

标签: c++ iostream cin

我在阅读中发现了这个......

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,那么它究竟做了什么呢?谢谢。

4 个答案:

答案 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: ";
}

评论中的信息。