void deleteRecord()
{
FILE *fp, *fdel;
struct person obj;
char number[20];
printf("\n============================");
printf("\n DELETE");
printf("\n============================\n\n");
fflush(stdin);
printf("Enter student number to delete :");
scanf("%s", number);
fp=fopen("D:\\data.txt","r");
fdel=fopen("D:\\del.txt","w");
while(fscanf(fp,"\n%s\n%s %s\n%s\n%s\n%s\n%s\n%s\n%s\n",
obj.stdNumb, obj.firstName, obj.lastName, obj.icPass,
obj.nationality, obj.gender, obj.dateOfBirth,
obj.contact, obj.address)==1)
if(stricmp(number, obj.stdNumb)!=0)
fprintf(fdel, "\n%s\n%s %s\n%s\n%s\n%s\n%s\n%s\n%s\n",
obj.stdNumb, obj.firstName, obj.lastName, obj.icPass,
obj.nationality, obj.gender, obj.dateOfBirth, obj.contact,
obj.address);
fclose(fp);
fclose(fdel);
remove("D:\\data.txt");
rename("D:\\del.txt","D:\\data.txt");
printf("Successully Deleted.");
getch();
}
这是我的完整代码,我删除;
之后,我删除fgetc
,如果我运行并删除记录,它将删除所有记录..它仍然没有指定..如何解决这个问题?
答案 0 :(得分:2)
在第一个视图中,您的“while”以“;”结尾,这导致它不执行任何操作,除了“while”本身。
在评估“while”命令后,您在预期循环中执行的所有操作始终执行!
顺便说一句,关闭循环中的文件似乎会导致第二次执行循环时出现问题。
答案 1 :(得分:1)
在最后一次编辑之后,代码中的错误已完全改变,现在就是你在循环中检查条件的方法了:
while (fscanf(...) == 1)
scanf
系列函数在出错或文件结束时返回EOF
,或者成功扫描转化次数。
由于你有9次转换,你应该检查所有9次转换:
while (fscanf(...) == 9)
答案 2 :(得分:1)
fclose(fp);
fclose(fdel);
remove("D:\\data.txt");
rename("D:\\del.txt","D:\\data.txt");
您可能希望将这些行移出while
循环或至少移出前else
的{{1}}块。