Как перезапустить цикл, если пользователь вводит алфавит в качестве переполнения стека

Я написал код для угадывания секретного числа, но у меня проблема, когда вместо целого числа вводится буквенный символ вместо целого числа. Это останавливает программу. Что, как я могу противостоять этой проблеме.

srand(time(0));
int a,secret;
secret=rand() % 10 +3;
do{
cout<<"Guess the secret num between 1-10 + 3 : ";
cin>>a;
else if(a>secret)
{
cout<<"Secret num is smaller!!"<<endl;
}
else if(a<secret) {
cout<<"Secret num is greater !!"<<endl;
}

}
while(a!=secret)
cout<<"   "<<endl;
cout<<""<<endl;
cout<<"Congratulations!!!! This is the secret num...."<<secret<<endl;

-3

Решение

Вам не нужно, но если вы все еще хотите решить проблему, вы можете выполнить потоковую передачу строки и получить ее только в числовом формате.

Ответил Джесси Хорошо здесь:

я хотел бы использовать std::getline а также std::string читать всю строку
а затем только вырваться из цикла, когда вы можете преобразовать весь
линия к двойному.

#include <string>
#include <sstream>

int main()
{
std::string line;
double d;
while (std::getline(std::cin, line))
{
std::stringstream ss(line);
if (ss >> d)
{
if (ss.eof())
{   // Success
break;
}
}
std::cout << "Error!" << std::endl;
}
std::cout << "Finally: " << d << std::endl;
}
0

Другие решения

В вашем случае, поскольку 0 находится вне допустимого диапазона, это действительно просто:

  1. инициализировать a до 0 и если a 0 после извлечения:
  2. clear cin
  3. ignore cin (Будьте осторожны, чтобы указать, что вы хотите игнорировать вплоть до символа новой строки: Не могу cin.ignore до EOF?)

Ваш окончательный код должен выглядеть примерно так:

cout << "Guess the secret num between 1-10 + 3 : ";
cin >> a;

while (a != secret) {
if (a == 0) {
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
cout << "Please enter a valid number between 1-10 + 3 : ";
}
else if (a < secret) {
cout << "Secret num is smaller!!\nGuess the secret num between 1-10 + 3 : ";
}
else if (a < secret) {
cout << "Secret num is greater !!\nGuess the secret num between 1-10 + 3 : ";
}
a = 0;

cin >> a;
}

Живой пример

0

По вопросам рекламы [email protected]