Primero, fgets funciona pero no en el segundo caso.
Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.
Soy un principiante completo y descubrí sobre fgets solo anoche! Lo usé y pareció funcionar la primera vez, pero omite el código en la segunda cadena.
“`
include <stdio.h>
include <string.h>
int main() {
char name[100];
char address[500];
int age;
printf("Ingrese sus detalles personales\n");
printf("Nombre: ");
fgets(name, 100, stdin);
name[strlen(name)-1] = '\0';
printf("Edad: ");
scanf("%d", &age);
printf("Dirección: ");
fgets(address, 500, stdin);
address[strlen(address)-1] = '\0';
printf("\nHola, %s, ¿cómo estás?\n", name);
printf("%d\n", age);
printf("%s", address);
return 0;
}
La salida es entonces
ninguno
Nombre: Taylor Swift
Edad: 18
Dirección:
Hola, Taylor Swift, ¿cómo estás?
18
“`</string.h></stdio.h>
davy.ai
El problema con el código es que
fgets
lee el carácter de salto de línea después de la entrada de edad como entero. Por lo tanto, cuando se hace la siguiente llamada afgets
para la dirección, lee el carácter de salto de línea que quedó y considera eso como entrada. Una solución sería agregar una llamada adicional agetchar
después de la entrada de edad para eliminar el carácter de salto de línea del búfer antes de llamar afgets
. Por ejemplo:Esto debería leer correctamente la entrada de dirección sin omitir ningún código.