int main()
{
int oddeven = 1;
int modulotwo;
// Simple loop since no reason to check 0
while(oddeven != 0){
//user input
cout << "\n\nIn while loop\n";
cout << "Input number to determine if it is odd or even.\n";
cin >> oddeven;
//check to see if input succesful
if(!(cin.fail())) {
cout << "In if loop\n";
cout << "Divide by two and put in modulotwo.\n";
//check to see if odd or even by dividing by 2
modulotwo = oddeven % 2;
cout << "Output modulotwo: ";
//visual confirmation of remainder
cout << modulotwo << "\n";
if (modulotwo == 0) {
cout << "Check modulotwo against 0\n";
cout << "The number " << oddeven << " is even.\n";
}
else {
cout << "The number " << oddeven << " is odd.\n";
}
}
//If input not succesful
else {
cout << "In else statement. Set oddeven to 1\n";
//set oddeven to 1 to stop exit
oddeven = 1;
cout << "Not a usable number, please input integer number." << endl;
cout << "Run cin.clear\n";
cin.clear();
cout << "Run cin.ignore\n";
cin.ignore(std::numeric_limits<std::streamsize>::max());
}
}
}
У меня есть выше, "простой" код, чтобы проверить, было ли число нечетным или четным. Я пытаюсь добавить исправление ошибок, чтобы убедиться, что ввод правильного типа. Мне указали на cin.clear и cin.ignore.
Моя проблема в том, что если я вызываю ошибку, она корректно переходит в оператор else, но это так. Это больше не будет управлять остальными. Я предполагаю это от cin.ignore.
Как мне заставить его правильно очистить ошибку и вернуться к входному циклу?
Если я удаляю cin.ignore, я получаю непрерывный цикл, сообщающий мне, что 1 нечетно, не ожидая ввода.
Дополнительный выходной текст был моим способом попытаться отследить, где был код и что он делал.
Редактировать. Я действительно прокомментировал cin.ignore перед публикацией здесь. Я пытался исследовать проблему сам и натолкнулся на комментарий об этом в поисках символа новой строки, но, как вы все также узнали, это не работает. Проблема проявляется при вводе буквы, а не любого числа, слишком большого или иного.