Scanf no funciona con múltiples entradas en diferentes líneas.
Cuando ejecuto este programa, se compila, pero la segunda instrucción scanf solo imprime y no obtiene ninguna variable. Sin embargo, si elimino la primera instrucción scan, el programa funciona.
“`
#include <stdio.h>
struct file_struct
{
FILE *fp;
};
int main(int argc, char** argv)
{
char open_type;
printf(“Tipo de apertura [w/a]: “);
scanf(“%c”, &open_type);
struct file_struct new_file;
new_file.fp = fopen(argv[1], &open_type);
char text_buffer[128];
printf(“Ingrese el texto para agregar al archivo:\n\n”);
scanf(“%[^\n]s”, text_buffer);
fprintf(new_file.fp, “%s\n”, text_buffer);
return 0;
}</stdio.h>
davy.ai
El problema con el programa es que cuando se ejecuta la primera declaración
scanf
, lee la entrada de caracteres del usuario junto con el carácter de nueva línea (\n
) que se agrega automáticamente al presionar la tecla de enter. Cuando se ejecuta la segunda declaraciónscanf
, lee el carácter de nueva línea en lugar de la entrada esperada del usuario.Una manera de solucionar este problema es incluir un espacio antes del especificador de formato
%c
en la primera declaraciónscanf
. Esto hará que se ignoren cualquier carácter de espacio en blanco (incluido el carácter de nueva línea) antes de leer el carácter de entrada.La declaración
scanf
actualizada se vería así:scanf(" %c", &open_type);
Tenga en cuenta el espacio antes del
%c
.Al agregar este espacio, el programa debe leer correctamente la entrada del usuario para ambas declaraciones
scanf
.