¿Por qué obtengo un ciclo infinito si ingreso una letra en lugar de un número?

Estoy escribiendo este código para una tarea (comenzando C ++ así que por favor vaya fácil). Recién comenzamos, hacemos, y hacemos bucles hoy. El progtwig funciona bien, excepto que si ingresas una letra cuando el progtwig solicita un número entero, se repite infinitamente. Que esta pasando? (Código a continuación) *** EDITAR: Para aclarar, la parte que está girando es: “El número que ingresó es negativo. Ingrese un número positivo para continuar”. Pero el usuario no tiene la oportunidad de ingresar otro número. Simplemente sigue imprimiendo esto.

#include  using namespace std; int main ( ) { //define variables int num1, num2, total; char answer1; do { //user enters a number cout <> num1; //check that the given num1 value is positive while (num1 < 0) { cout <> num1; } cout <= num2) { total = total + num2; num2 ++; } //tell the user the sum cout << "The total of all the integers\nfrom 1 to " << num1 << " is: \n"; cout << total; //ask if the user wants to try again cout <> answer1; } while (answer1 == 'y'); cout << endl; return 0; } 

Así es como funciona basic_istream . En su caso, cuando cin >> num1 recibe una entrada incorrecta, se establece failbit y cin no se borra. Así que la próxima vez será la misma entrada incorrecta. Para manejar esto correctamente, puede agregar verificación para la entrada correcta y borrar e ignorar cin en caso de una entrada incorrecta. Por ejemplo:

  #include //user enters a number cout < < "\nPlease enter a positive number and press Enter: \n"; do { while(!(cin >> num1)) { cout < < "Incorrect input. Please try again.\n"; cin.clear(); cin.ignore(numeric_limits::max(), '\n'); } if(num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue.\n"; } while(num1 < 0); 

Cuando ingresa una letra, se establece el estado de error de cin y no habrá ninguna entrada adicional antes de llamar a cin.clear() . En consecuencia, la statement cin >> num1 no cambiará el valor de num1 y se repetirá siempre.

Prueba esto:

  while (num1 < 0) { cout << "The number you entered is negative.\nPlease enter a positive number to continue.\n"; cin.clear(); cin >> num1; } 

EDITAR:

Gracias a Lightness por señalar esto. Debe inicializar num1 también:

 int num1=-1, num2, total; 

Esta respuesta debería resolver su problema. Básicamente, estás tratando de leer un carácter de la transmisión y no se puede analizar en un int, por lo que la transmisión se deja en un estado de error.

Debería verificar si hay un error, borrarlo y reactjsr en consecuencia.

Puede usar un tipo de datos “char” como entrada del usuario y luego usar “static_cast (” nombre de la variable “);

 char input; int choose; cin >> input; choose = static_cast(choose) - 48;///then use 'if' statement with the variable 'choose'