2012-04-18 12 views
1

Линия if (! (Cin.good())) cout < < «Нет букв» < < endl; постоянно повторяю, если я печатаю буквы, но другие работают нормально. Не могу понять почему.C++ cout продолжает повторять

#include <iostream> 
#include <cstdlib> 
#include <time.h> 
#include <cstdio> 
using namespace std; 

int main() 
{ 
    int x; 
    cout << "Please enter a number\n"; 

    srand(time(0)); 
    int y = rand(); 

    while (x != y) 
    { 
     cin >> x; 
     if (!(cin.good())) 
      cout << "No letters" << endl; 
     else if (x < y) 
      cout << "Go higher" << endl; 
     else if (x > y) 
      cout << "Go lower" << endl; 
     else 
      cout << "You win!!" << endl; 
    } 
cin.get(); 
getchar(); 
return 0; 

} 

ответ

4

Ваш недопустимый вход находится во входном буфере. Если вы просто хотите, чтобы бросить все это, вы можете сделать это:

... 
if (!cin.good()) 
{ 
    cout << "No letters" << endl; 
    cin.clear(); // clear error flags 
    cin.sync(); // synchronize stream with input source 
} 
... 
+1

Теперь он говорит об ошибке: «else» без предыдущей «if» – Foxic

+1

@ 30trix. У вас есть еще одна опечатка. Возможно, забыли закрыть фигурные скобки? Или вообще не указаны фигурные скобки? –

1

Вам нужно потреблять плохой ввод, так как он просто останется в буфере.

+0

Не знаю, как, еще новичок – Foxic

+0

То, что он означает, что, когда вы попросили CIN прочитать целое, и это не удалось, он оставил там не целое число, и продолжает повторять попытку его прочитать. Вам нужно попросить cin прочитать что-то, что будет успешно читать, что не целое, как строка, чтобы вы могли пройти мимо него. (Также обратите внимание, что x неинициализирован.) –

Смежные вопросы