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.

La función scanf para char dentro de un bucle es algo extraña.

“`c++
#include <stdio.h>

int main() {
for (int i = 0; i < 10; i++) {
printf("0");
char a[0];
scanf("%c", a);
}
}
“`

Escribí este código y por cada carácter en la entrada, se ejecuta un bucle adicional sin volver a escanear. Por lo tanto, la salida muestra lo siguiente:

0 [ingreso ‘1’, luego:]
0011
000111
0000

Luego, el bucle termina. Es como si guardara los caracteres en el búfer de scanf y los eliminara uno por uno en cada bucle, volviendo a leerlos adicionalmente. ¿Pero por qué?</stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema en el código reside en el uso de scanf. Cuando utilizas scanf para leer un carácter, deja el carácter de nueva línea en el búfer de entrada. Así que cuando el bucle se repite y se llama a scanf nuevamente, lee el carácter de nueva línea que quedó de la entrada anterior en lugar de esperar una nueva entrada.

    Para solucionar este problema, puedes agregar un espacio antes de %c en la declaración de scanf de la siguiente manera:

    scanf(" %c", a);
    

    Esto le indicará a scanf que ignore cualquier espacio en blanco, incluido el carácter de nueva línea, antes de leer el siguiente carácter.

Comments are closed.