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.

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>

Tags:  , ,

Answer

  1. Avatar for 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 a fgets 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 a getchar después de la entrada de edad para eliminar el carácter de salto de línea del búfer antes de llamar a fgets. Por ejemplo:

    printf("Edad: ");
    scanf("%d", &edad);
    getchar(); // elimina el carácter de salto de línea del búfer
    
    printf("Dirección: ");
    fgets(direccion, 500, stdin);
    direccion[strlen(direccion)-1] = '\0';
    

    Esto debería leer correctamente la entrada de dirección sin omitir ningún código.

Comments are closed.