如何指定txt文件中的位置以删除C编程中的记录

时间:2013-05-09 12:38:13

标签: c file record

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

3 个答案:

答案 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}}块。