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.

Por favor ayuda a depurar el programa C

Escribe un programa en C que solicite al usuario que ingrese

  • mes
  • día
  • año
  • ID del estudiante
  • nombre
  • fecha de nacimiento

Ejecuta el programa y guarda los datos ingresados en un archivo doc que se nombra con el número de estudiante.
Consejo: usa una estructura.

Problema: El programa se detiene después de mostrar el mes, el día y el año

#include <stdio.h>
#include<string.h>
struct DatosEstudiante {
    char nombre[50];
    int id;
    int nacimiento;
    char ubicacion[20];
}estudiante;

int main() {
FILE * fPtr;
   fPtr = fopen("datos/archivo1.txt", "w");

    int mes, dia, año;
    strcpy(estudiante.nombre,"Krystal");
    strcpy(estudiante.ubicacion,"Perú");
    estudiante.id=546738293;
    estudiante.nacimiento=150491;
    printf("Ingrese el número del mes:\n");
    scanf("%d",&mes);
    printf("Ingrese el día: ");
    scanf("%d",&dia);
    printf("Ingrese el año: ");
    scanf("%d\n",&año);

    printf("La fecha actual es: año-%d, mes-%d, día-%d\n",año, mes, dia);
    printf("El nombre del estudiante es %s\n",estudiante.nombre);
    printf("El ID del estudiante es %d\n",estudiante.id);
    printf("La fecha de nacimiento del estudiante:%d\n",estudiante.nacimiento);
    printf("La ubicación del estudiante es %s\n",estudiante.ubicacion);


    return 0;
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay varios problemas con el código proporcionado que impiden que cumpla el propósito previsto de solicitar al usuario una entrada y guardarla en un archivo.

    1. La estructura StudentData está definida pero no se utiliza en el código. En su lugar, los valores de name, id, birth y location están codificados directamente, lo que significa que la entrada del usuario no se almacenará correctamente.
    2. El puntero de archivo fPtr se abre con una ruta de archivo que no existe (data/file1.txt). Esto puede causar problemas con la creación y escritura de archivos.

    3. La función scanf para ingresar el año incluye un carácter de nueva línea \n al final de la cadena de formato, lo que puede causar un comportamiento inesperado al ingresar valores.

    Para solucionar estos problemas y crear un programa funcional, se deben realizar los siguientes cambios:

    #include <stdio.h>
    #include <string.h>
    
    struct StudentData {
        char name[50];
        int id;
        int birth;
        char location[20];
    } student;
    
    int main() {
        FILE *fPtr;
        int month, day, year;
    
        printf("Ingrese el nombre del estudiante: ");
        fgets(student.name, sizeof(student.name), stdin);
    
        printf("Ingrese el ID del estudiante: ");
        scanf("%d", &student.id);
    
        printf("Ingrese la fecha de nacimiento del estudiante (MMDDYY): ");
        scanf("%d", &student.birth);
    
        printf("Ingrese la ubicación del estudiante: ");
        fgets(student.location, sizeof(student.location), stdin);
    
        printf("Ingrese el mes: ");
        scanf("%d", &month);
    
        printf("Ingrese el día: ");
        scanf("%d", &day);
    
        printf("Ingrese el año: ");
        scanf("%d", &year);
    
        printf("La fecha actual es: año-%d, mes-%d, día-%d\n", year, month, day);
        printf("El nombre del estudiante es %s\n", student.name);
        printf("El ID del estudiante es %d\n", student.id);
        printf("Fecha de nacimiento del estudiante: %d\n", student.birth);
        printf("La ubicación del estudiante es %s\n", student.location);
    
        // Crear archivo con el ID del estudiante como nombre
        char filename[30];
        sprintf(filename, "data/%d.txt", student.id);
        fPtr = fopen(filename, "w");
    
        // Escribir datos en el archivo
        fprintf(fPtr, "Nombre: %s\n", student.name);
        fprintf(fPtr, "ID: %d\n", student.id);
        fprintf(fPtr, "Fecha de nacimiento: %d\n", student.birth);
        fprintf(fPtr, "Ubicación: %s\n", student.location);
        fprintf(fPtr, "Fecha: %d/%d/%d\n", month, day, year);
    
        fclose(fPtr);
        return 0;
    }
    

    En este código, se realizaron los siguientes cambios:
    – La estructura StudentData se utiliza para almacenar la entrada del usuario en name, id, birth y location.
    – Se utiliza la función fgets para recibir de forma segura la entrada de cadenas del usuario para name y location, ya que permite ingresar hasta el tamaño del búfer sin desbordamiento.
    – La cadena de formato para scanf al ingresar la fecha de nacimiento ahora usa "%d" como especificador de formato, ya que no es necesario ingresar el año por separado, ya que ya se está solicitando. La entrada estará en el formato MMDDYY (por ejemplo, “090199” para el 1 de septiembre de 1999).
    – El puntero de archivo fPtr ahora se crea con una ruta de archivo que incluye el ID del estudiante en el nombre del archivo.
    – Se utiliza la función fprintf para escribir los datos del estudiante en el archivo, con cada campo separado por un carácter de nueva línea. La fecha se escribe como “MM/DD/AA” según la entrada del usuario.
    – El archivo se cierra con fclose(fPtr) para asegurarse de que los datos se escriban antes de finalizar el programa.

    Con estos cambios, el programa solicitará al usuario una entrada, almacenará los datos en un archivo según el ID del estudiante y mostrará los datos ingresados por la consola.</string.h></stdio.h>

Comments are closed.