Как отловить ошибки во время выполнения в C ++? - PullRequest
1 голос
/ 31 марта 2012

У меня проблема с возможностью исправления ошибок во время выполнения, когда пользователь вводит данные, отличные от ожидаемых. Например, ожидается целое число, но (возможно) пользователь вводит строку. В моих консольных программах, когда это происходит, я просто печатаю много мусора на моем экране, и он заходит в бесконечный цикл. Как я могу позаботиться об этом, чтобы в этом случае отображалось сообщение об ошибке, а не вся программа, отправляющаяся в мусорную корзину?

int x = 0;
cout << "\n\nEnter a number(1-9): ";
cin >> x;
if(x<1 || x>9)
{
   cout<<"\nThe place you entered is invalid. Please enter the correct place number";
}else{
   cout<<"Correct";
}

Если я ввел число выше 2 ^ 31 (я знаю, что это максимальное значение для типа данных int) или значение char, оно входит в бесконечный цикл. Как я могу поймать решить эту проблему

1 Ответ

2 голосов
/ 31 марта 2012

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

Описание одногоподход для правильного чтения данных из cin, вы можете проверить эти примечания к курсу из Stanford CS106L , которые описывают, как потоки работают в C ++ и как правильно читать и записывать данные.

Надеюсь, это поможет!

...