输入文件后,cin不会停止

时间:2019-03-22 03:33:20

标签: c++ cin

我试图直接从命令行输入文件后使用cin读取int。这是我的文件:

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9

它们是81个数字。这是有问题的代码:

#include <iostream>
using namespace std;

int main()
{
    int array[81];
    for(int i = 0; i < 81; i++)
        cin >> array[i];

    int x = 999;
    cin >> x;
    cout << x << endl;

    return 0;
}

我试图这样输入文件:     ./a.out < myfile

但是,cin >>不会停止并直接输出999作为输出。我已经尝试过cin.clear()cin.ignore(INT_MAX, 'n'),但是它们都不起作用。然后,我认为输入这样的文件有一些特殊之处,因此我在运行a.out(不使用< myfile输入)后键入所有81个数字,如果这样做,程序将继续接受输入并永不停止或打印。

我不知道我遇到了什么...?

1 个答案:

答案 0 :(得分:2)

cin >> x;

失败,您的代码无法检测到它。使用:

if ( cin >> x )
{
   // Reading to x was successful. Use it.
   cout << x << endl;
}
else
{
   // Reading to x was not successful. Figure out what to do.
}

作为一般原则,请检查每个IO调用的状态。准备在每次这样的呼叫后处理失败。在确认调用成功之前,请勿使用期望从IO操作获取的任何数据。从长远来看,这将为您节省很多心痛。