es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué señales debe scanf leer?

En el siguiente fragmento, después de leer el entero, el ‘\n’ permanece en el stdin y es leído por el segundo scanf.

¿Se llama a scanf cuando se presiona “Enter” y luego lee lo que está en el stdin, o se llama antes de que ocurra la escritura?

¿Qué indica a scanf que la entrada está lista? Por ejemplo, si escribo en mi teclado 12345 y scanf está leyendo un entero, puede leerse como 1, 12, 123… Si “Enter” es la señal para leer, ¿por qué scanf no elimina ese carácter del stdin?

“`C
#include <stdio.h>

int main()
{
int a;
scanf( "%d", &a );

<pre><code>char b;
scanf( "%c", &b );

printf( "%d %c", a, b );
return 0;
</code></pre>

}
“`</stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    scanf se llama después de que el usuario ingrese el valor y presione la tecla Enter. El carácter de nueva línea (\n) se deja en el búfer de entrada estándar por scanf(“%d”, &a), y luego se lee por el siguiente scanf(“%c”, &b) antes de que el usuario tenga la oportunidad de ingresar algo.

    scanf recibe una señal de que la entrada está lista cuando se presiona la tecla Enter en el teclado después de ingresar el valor. Lee la entrada del búfer de entrada estándar solo cuando se presiona la tecla Enter. Sin embargo, scanf no borra el carácter de nueva línea (\n) del búfer de entrada estándar, que queda allí después del primer scanf, lo que hace que se lea como un carácter vacío por el segundo scanf.

    Para evitar que el siguiente scanf lea el carácter de nueva línea, puedes agregar un espacio antes del especificador de formato en la segunda declaración scanf de la siguiente manera:

    scanf(" %c", &b);

    Esto hará que scanf omita cualquier carácter de espacio en blanco al principio, incluyendo el carácter de nueva línea dejado en el búfer por el primer scanf.

Comments are closed.