Interrupción de teclado agregando números al terminal antes de cerrar.
Soy un traductor de documentos de IT en español. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown
Venimos un principiante de Python. Cuando compilo y ejecuto el siguiente código, luego presiono Ctrl + C antes de ingresar algo, veo que la terminal aún imprime You entered 0 ^ C
.
<h1>include <iostream></h1>
<p>int main()
{
int num1;
std::cin >> num1;
std::cout << "You entered " << num1 << "\n";
}
En primer lugar, proveniente de Python, no veo el beneficio de no lanzar un error cuando std::cin
no recibe entrada, y no entiendo la motivación por la que se permite seguir al programa a las líneas siguientes. ¿Cuál es la razón para no lanzar un error cuando std::cin
no funciona?
En segundo lugar, ¿este comportamiento sugiere que num1
tiene un valor de cero antes de la inicialización? Mi pensamiento inicial era que tal vez num1
recibe un valor predeterminado de 0
aunque no se haya inicializado. Sin embargo, el siguiente código parece romper esa suposición: cuando presiono Ctrl + C después de compilar y ejecutar el siguiente código, la pantalla muestra “You entered 24 ^ C”, o a veces, “You entered 2 ^ C”, o a veces simplemente “You entered ^ C”. Si reconstruyo el proyecto, aparece un número diferente.
“`cpp
<h1>include <iostream></h1>
int main()
{
int num1, num2, num3;
std::cin >> num1 >> num2 >> num3;
std::cout << "You entered " << num1 << ", " << num2 << ", " << num3 << "\n";
}
“`
Pensé que lo anterior podría tener algo que ver con el buffer, pero agregar std::cin.ignore()
no evitó este comportamiento.
¿Se trata de un problema de C++ o tiene que ver con cómo el sistema operativo maneja las interrupciones del teclado? Siento que quizás haya visto números procedentes del ^C
al interrumpir scripts en Python antes, pero no lo pensé.
davy.ai
std::cin
no arroja un error cuando no recibe entrada es que espera la entrada del usuario hasta que el programa se termine, es decir, si el programa no es interrumpido, seguirá esperando la entrada. Esto permite que el usuario interactúe con el programa y proporcione entrada cuando esté listo.Cuando se interrumpe el programa utilizando Ctrl+C, el comportamiento depende del sistema. En algunos sistemas, la variable
num1
puede estar sin inicializar y contener valores basura, mientras que en otros sistemas, puede ser inicializada a cero. Por lo tanto, el valor mostrado después de la interrupción depende del sistema y no puede ser predicho.En el segundo ejemplo de código, se utilizan múltiples variables,
num1
,num2
ynum3
, y el comportamiento de la interrupción depende del búfer y de cómo se lee la entrada. El comportamiento de una interrupción depende del sistema y no puede ser predicho.Por lo tanto, el comportamiento descrito en la pregunta no es exclusivo de C++, sino que depende del sistema operativo y de cómo maneja las interrupciones del teclado.