Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言编程中如何指定txt文件中删除记录的位置_C_File_Record - Fatal编程技术网

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

C语言编程中如何指定txt文件中删除记录的位置,c,file,record,C,File,Record,这是我的完整代码,我删除了在while之后,我删除了fgetc,如果我运行并删除记录,它将删除所有记录。。还没有具体说明。。如何修复此问题?上次编辑后,代码中的错误已完全更改,现在是如何检查循环中的条件: void deleteRecord() { FILE *fp, *fdel; struct person obj; char number[20]; printf("\n============================"); printf("\n DELETE"

这是我的完整代码,我删除了
在while之后,我删除了
fgetc
,如果我运行并删除记录,它将删除所有记录。。还没有具体说明。。如何修复此问题?

上次编辑后,代码中的错误已完全更改,现在是如何检查循环中的条件:

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();
}
scanf
函数系列在文件出错或结束时返回
EOF
,或返回成功扫描的转换次数

由于您有九次转换,您应该检查所有九次转换是否都已完成:

while (fscanf(...) == 1)
您可能希望将这些行移出
while
循环,或者至少在前面
else
块中移动,如果在第一次查看时,您的“while”以“;”结尾,这会导致它除了“while”本身之外什么也不执行

在执行“while”命令之后,您在预期循环中执行的所有操作都将始终执行


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

+1注意
末尾的分号,而
。对于OP,保持行短,如果可能的话,将它们分成多行,因为这使代码更容易阅读。+1是代码风格的提示。这类提示必须教给新手。伙计们,谢谢你的提示:p。。我编辑了一些代码,但它甚至删除了所有记录。。有什么建议吗?所以Newbieee@NiloPaimI编辑了您的代码格式,将长行分解为多行。这简化了在代码中查找严重错误的过程,因为不需要水平滚动。使代码易于阅读非常重要,这不仅是为了我们自己,也是为了您自己。我已删除了与问题无关的代码,并重新格式化了其余代码,以使
deleteRecord
函数的结构更加明显。为什么要比较fscanf(…)==1
?检查
while (fscanf(...) == 9)
    fclose(fp);
    fclose(fdel);
    remove("D:\\data.txt");
    rename("D:\\del.txt","D:\\data.txt");