为什么这个cin循环永远不会结束?

问题描述 投票:0回答:2

在下面的代码中,如果用户输入的不是一个 int,程序进入无限循环。 为什么会发生这种情况,我应该怎么做才能解决?

#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;
}
c++ iostream
2个回答
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读取的好方法。 它很脆弱,任何无效的输入都会使你的程序完全崩溃,因为get本身就不安全。 关于在C++中获取输入的更安全、更稳健的方法的讨论,请看以下内容 http:/www.stanford.educlasscs106lcourse-readerCh3_Streams.pdf

© www.soinside.com 2019 - 2024. All rights reserved.