-1
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,如果我运行并删除记录,它将删除所有记录..它仍然没有指定..如何解决这个问题?

4

3 回答 3

2

乍一看,您的“while”以“;”结尾,这导致它除了“while”本身之外什么都不执行。

在评估“while”命令之后,您在预期循环中所做的所有事情都会执行!

顺便说一句,似乎关闭循环内的文件会导致循环的第二次执行出现问题。

于 2013-05-09T12:45:57.440 回答
1

在最后一次编辑之后,您的代码中的错误已经完全改变,现在是您在循环中检查条件的方式:

while (fscanf(...) == 1)

函数族scanf返回EOF错误或文件结尾,或成功扫描的转换次数。

由于您有九次转换,您应该检查所有九次转换:

while (fscanf(...) == 9)
于 2013-05-09T12:42:43.523 回答
1
    fclose(fp);
    fclose(fdel);
    remove("D:\\data.txt");
    rename("D:\\del.txt","D:\\data.txt");

您可能希望将这些行移出while循环或至少在else前面的块中if

于 2013-05-09T12:44:06.380 回答