Не могу очистить Cin. Застрял на входе

когда 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() работал. В чем причина?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]