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>
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:
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.