2011-02-04 109 views
0

在以下代码中,如果用户输入的内容不是int,程序将进入无限循环。为什么会发生这种情况,我该如何解决这个问题?为什么我的cin循环永远不会结束?

#include <iostream> 
#include <string> 
using namespace std; 


int main() 
{ 
    int i; 
    char str[100]; 
    while (!(cin >> i)) 
    { 
     gets(str); 
     cout << "failure read!" << endl; 
    } 

    cout << "successful read!" << endl; 
    return 0; 
} 
+1

什么你想干什么? – 2011-02-04 19:22:14

+0

什么不正确?请具体说明。 – birryree 2011-02-04 19:23:33

+0

请以问题的形式重申您的问题。 – tylerl 2011-02-04 19:23:51

回答

4

清除错误状态:

int main() 
{ 
    int i; 
    char str[100]; 
    while (!(cin >> i)) 
    { 
     cin.clear(); 
     cin.getline(str,100); 
     cout << "failure read!" << endl; 
    } 

    cout << "successful read!" << endl; 
    return 0; 
} 
1

我认为你想用一个if语句替换while循环,用这个循环,你会在发生错误时不断从cin读取数据。但是,cin的结构是这样的,在发生错误之后,您必须手动清除错误状态,并且由于您没有这样做,因此会进入无限循环。使用if语句试图读取一个值,然后让你知道它是否成功。

此外,这真的不是从cin读取的好方法。这是脆弱的,任何无效的输入可以完全取消你的程序,因为获取本质上是不安全的。为了更安全,更可靠的方式来获得在C++中输入的讨论,看看http://www.stanford.edu/class/cs106l/course-reader/Ch3_Streams.pdf