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");