文件输入后cin不会停止

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

我试图直接从命令行输入文件后使用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后输入所有81个数字(不使用< myfile输入),如果我这样做,程序将继续输入并永不停止或打印。

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

c++ cin
1个回答
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操作获得的任何数据。从长远来看,这将为您节省很多心痛。

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