2017-01-26 6 views
0

Когда я даю неправильный ввод, как строка «abx», он дает мне сообщение об ошибке, но не возвращается в цикле или не попросит меня повторить попытку. Этот пример приведен из примера курса Google C++ 4.Почему эта программа не входит в цикл?

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

int main() 
{ 
    int isecret, iguess, chance; 
    srand(time(NULL)); 
    isecret = rand() %100 + 1; 
    cout<<"Enter integers between 1 to 100"<<endl; 
    //cout<<isecret<<endl; 
    chance = 0; 

    do{ 
     if (!(cin>>iguess)) 
     { 
      cout<<"please enter integers between 1 to 100"<<endl; 
      cin.clear(); 
      cin.ignore(10000/'\n'); 
     } 

     else 
     { 

      if (isecret>iguess) 
      { 
       cout<<"Your guess is less than the secret"<<endl; 
      } 
      else if (isecret<iguess) 
      { 
       cout<<"Your guess is more than the secret"<<endl; 
      }; 
     chance = chance + 1; 
     } 
    } 
    while(iguess!=isecret); 
    cout<<"Congratulation you guess the correct number: "<<isecret<<" in "<<chance<<" chances"<<endl; 
    return 0; 
} 
+0

Можете ли вы быть более конкретными с вашим вопросом? Непонятно, что вы спрашиваете. Что ты пытаешься сделать? –

+0

поэтому, когда я запускаю программу, она запрашивает у меня вход (который должен быть целым). Теперь предположим, что если я не помещаю целое число, тогда я запускаю первый «if-conditional», который просит меня ввести действительный ввод. Теперь я ожидаю, что программа снова перенаправит меня, чтобы ввести новый вход, но вместо этого он стоит на месте. Я хочу отреагировать на это. –

+0

Я не уверен, что вы подразумеваете под «стоять на месте» в этом контексте. Но одна вещь, которая может помочь, - добавить некоторые отладочные сообщения. Например, поставьте 'cout <<" Выполнение блока, который делает ... "' в разных местах вашего кода. Затем вы можете точно видеть, как работает ветка. Вы также можете сделать это с помощью отладчика. –

ответ

0

Вы пропустили запятую. Таким образом, заменить

cin.ignore(10000/'\n'); 

с

cin.ignore(10000,'\n'); 

См ведения cin.ignore()

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