Estoy aprendiendo C++ y escribiendo pequeños programas a medida que avanzo. El siguiente es uno de esos programas:bucle infinito en C++
// This program is intended to take any integer and convert to the
// corresponding signed char.
#include <iostream>
int main()
{
signed char sch = 0;
int n = 0;
while(true){
std::cin >> n;
sch = n;
std::cout << n << " --> " << sch << std::endl;
}
}
Cuando ejecuto este programa y mantener las entradas al razonablemente pequeños valores absolutos, se comporta como se esperaba. Pero cuando ingreso entradas más grandes, por ejemplo, 10000000000, el programa escupe repetitivamente la misma salida. Algunas combinaciones de entrada causan un comportamiento errático. Por ejemplo:
#: ./int2ch
10
10 -->
10000000000
10 -->
10 -->
10 -->
10 -->
El programa escupe "10 ->" hasta que se destruye. (Con esta secuencia particular de entradas, la salida del programa cambia la velocidad de forma errática.) También noté que la salida de valores grandes está determinada por la entrada legal anterior así como también por el valor de la entrada ilegal actual.
¿Qué está pasando? (No me importa arreglar el programa, eso es fácil. Quiero entenderlo)
Como alternativa, realice una llamada a std :: cin.clear() para eliminar el estado de error antes de la siguiente pasada del ciclo. – hark