Cómo actualizar un archivo de texto estructurado línea por línea.
Mi código almacena todos los detalles de las actividades en un archivo y tengo problemas para acceder a los datos de ese archivo buscando por ID. Esta es mi función de agregar actividades y estructura.
//struct for activities
struct activities{
char id[5];
char actName[200];
char date[20];
char day[20];
}act;
//function to add volunteering activities
void addAct(){
FILE *fileAct;
//prompt user to enter activities details
printf("\n\t Planning Volunteering Activities");
printf("\n\t -----------------------------------");
printf("\n\t Program ID \t: ");
scanf(" %[^\n]%*c", &act.id);
printf("\t Name of Activity : ");
scanf(" %[^\n]%*c", &act.actName);
printf("\t Date \t\t: ");
scanf(" %[^\n]%*c", &act.date);
printf("\t Day \t\t: ");
scanf(" %[^\n]%*c", &act.day);
//create & write in file activity
fileAct = fopen("Activity", "a");
fprintf(fileAct, "\n\t %s \n", act.id);
fprintf(fileAct, "1. Name of Activity : %s \n", act.actName);
fprintf(fileAct, "2. Date : %s \n", act.date);
fprintf(fileAct, "3. Day : %s \n", act.day);
//close file activity
fclose(fileAct);
}
Y esta es mi función de actualización.
//function to update activities
void updateAct(){
//variable declaration
char progID[5];
//open activity file
FILE *fp = fopen ("Activity", "r");
//prompt user to search activities to update
printf("\t Search by Program ID : ");
scanf(" %[^\n]%*c", &progID);
while( !feof(fp)){
fread (&act, sizeof(struct activities), 1, fp);
if (strcmp(progID, act.id) == 0)
printf("%s %s", act.id, act.actName);
}
fclose(fp);
}
En la función de actualización anterior, no pude acceder a act.id
en la estructura basándome en la búsqueda del usuario, en su lugar, el programa muestra todos los datos del archivo. ¿Cómo puedo solucionar este problema?
davy.ai
Para solucionar el problema de mostrar todos los datos en el archivo en lugar de acceder solo a la actividad con el ID correspondiente ingresado por el usuario, puedes modificar la función de actualización de la siguiente manera:
Aquí, hemos agregado una comprobación de si el archivo se abrió correctamente o no. Luego, hemos realizado algunas modificaciones en el bucle while. En lugar de utilizar la función feof(), utilizamos fread() para leer los datos del archivo. Luego, verificamos si el ID ingresado por el usuario coincide con el ID en la estructura. Si coincide, mostramos los detalles de esa actividad en particular. Finalmente, cerramos el archivo.
Al realizar estos cambios, deberías poder acceder solo a los datos relevantes que coinciden con el ID ingresado por el usuario.