【发布时间】:2022-01-02 17:18:25
【问题描述】:
如何从文本文件中删除一条记录(在数组结构中)?我的代码有效,但它也删除了其他记录。我可以知道我的代码有什么问题吗?这是它的样子:
{
zfp = fopen("note.txt", "wb+");
if (fp == NULL)
{
printf("| File can not be opened.\n");
exit(1);
}
for(int k = 0; k < len; k++)
{
if(k == s)
{
strcpy(notes[s].title, "\0");
notes[s].day = 0;
notes[s].month = 0;
notes[s].year = 0;
}
}
fwrite(¬e, sizeof(note), 1, fp);
fclose(fp);
}
顺便说一句,在这部分之前,我有一个代码询问您要删除的事件编号。数组索引从 0 开始,事件编号从 1 开始。因此与该事件编号关联的数据/记录将是 s = eventnumber - 1 以匹配数组的索引。
【问题讨论】:
-
将
fwrite和struct与“文本文件”一起使用不是可行的方法。 -
读取文件。修改内存中的数据。将数据写入新文件。删除旧文件。将新文件重命名为旧文件名。使用文件的完整路径以确保它会影响您想要的文件。
-
您正在编写二进制文件,而不是文本文件。
-
什么是
note?您的循环处理一个名为“notes”的数组。 -
无需使用循环和
if语句将数组的一条记录归零。只需在没有循环的情况下对notes[s]进行分配。
标签: arrays c struct record delete-record