когда cin
терпит неудачу, терпит неудачу навсегда. То есть Я ничего не могу прочитать потом и cin.fail()
всегда возвращает истину, независимо от того, как я пытаюсь это очистить.
Минимальный код для воссоздания:
#include <iostream>
using namespace std;
int main(){
int d;
while (!(cin >> d)) // Loop until I get a valid integer
{
cin.ignore(9999, '\n');
cin.clear();
}
cout << d << endl;
return 0;
}
С минимальным вкладом:
a<Enter>
Я попробовал все ответы C ++ под этот вопрос, но никто из них не работал. Достаточно странно, fflush(stdin)
сделал хорошую работу.
Я использую Dev-C ++ в качестве своей IDE и заменил упакованный GCC на MinGW GCC 6.3.0 от SourceForge. Следующие аргументы предоставляются g++.exe
при компиляции
-Wall -Wextra -std=c++14 -s -O3 -static-libgcc -static-libstdc++
Та же самая проблема также произошла с GCC 7.2.0 на моем Ubuntu без последних двух -static
аргументы.
Как предлагается в комментариях, обмен местами cin.clear()
а также cin.ignore()
работал. В чем причина?
Задача ещё не решена.
Других решений пока нет …