【发布时间】:2022-01-02 16:04:18
【问题描述】:
我的代码将所有活动详细信息存储在一个文件中,我在使用 id 搜索访问该文件中的数据时遇到问题。这是我的添加活动函数和结构。
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);
}
这是我的更新功能。
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);
}
在上面的更新函数中,我无法根据用户搜索访问struct中的act.id,而是程序将整个数据显示在文件中。如何解决这个问题?
【问题讨论】:
-
请提供信息:实际输出是什么,期望的输出是什么,输入的样子。
-
注意:
while (!feof(...))错误,导致对最后一条记录进行两次处理... -
用户输入id,然后程序应该只显示该id的所有活动信息。但是,对于我的代码,尽管我尝试仅显示 act.id,但程序会显示该特定文件中的所有数据。
-
@SergeBallesta 你能指导我用什么来替换 while 语句吗?
-
@penguinsoo:我提供的链接应该可以解释一切......(比我能写的要好得多)