Цикл и символ в переменной int не работают, как я ожидал - PullRequest
3 голосов
/ 07 ноября 2010

Я увидел необычную проблему в этом коде:

#include <iostream>
using namespace std;

int main()
{
 int number;
 bool repeat=true;

 while (repeat)
 {
  cout<<"\nEnter a number:";
  cin>>number;
  cout<<"\nNumber is:"
   <<number;
  cout<<"\nRepeat?:";
  cin>>repeat;
 }
 system("pause");
 return 0;
}

здесь, в этом коде, когда я вставил символ , такой "A" в int переменную типа пока цикл повторяется снова и снова, и не спрашивайте меня, повторять или нет.эта проблема просто появляется, когда я ставлю символы, а не целые числа.это появляется с для тоже.

почему это должно произойти?спасибо

Ответы [ 2 ]

3 голосов
/ 07 ноября 2010

После чтения в пользовательском вводе, который не может быть преобразован, поток ввода находится в недопустимом состоянии.Вам необходимо очистить поток и вызвать метод clear для сброса битов ошибок в потоке, чтобы возобновить нормальную работу.

Если вы обнаружите, что ввод не был успешным (используя биты состояния входных потоков,доступны через методы типа good() или fail() и т. д.) Вы можете сбросить поток, используя код, подобный следующему:

std::cin.clear(); 
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');   
0 голосов
/ 07 ноября 2010

Вы помещаете cin в состояние ошибки, когда вы не смогли извлечь из него int и не восстановились. Поэтому, когда вы попытались извлечь из него повтор, поток все еще находится в состоянии сбоя. Вам нужно проверить на отсутствие номера (просто используйте if (cin >> number)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...