cin не остановится после ввода файла - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь использовать 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'), но ни один из них не работает. Тогда я думаю, что есть что-то особенное для ввода такого файла, поэтому я набираю все 81 цифру после запуска a.out (без ввода < myfile для ввода), если я это сделаю, программа продолжит принимать ввод и никогда не останавливается или распечатать.

Понятия не имею, с чем я сталкиваюсь ...?

1 Ответ

2 голосов
/ 22 марта 2019
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.Будьте готовы справиться с неудачей после каждого такого звонка.Не используйте никакие данные, которые вы ожидаете получить от операции ввода-вывода, пока не убедитесь, что вызов выполнен успешно.Это избавит вас от душевных страданий в долгосрочной перспективе.

...