【发布时间】:2020-06-16 05:53:53
【问题描述】:
我从用户那里获取输入并存储在一个结构中,然后使用将它们写入 txt 文件
fwrite(&a[i],sizeof(a[i]),1,file);
现在我要做的是删除存储在文件中的结构的特定索引数据。 这是我尝试做的。
void deletespecific()
{
int delroll;
printf("ENTER THE ROLL NUMBER TO DELETE: ");
scanf("%d",&delroll);
readdata(); //reads all data stored in the file
file=fopen("Records.txt","w");
for (int w=0;w<t;w++)
{
if(a[w].roll!=delroll)
{
fwrite(&a[w],sizeof(a[w]),1,file);
}
}
fclose(file);
printf(Green"DATA SUCCESSFULLY DELETED!\n"Reset);
}
我首先将文件中存储的所有数据读入结构中,然后仅当卷不等于要删除的卷时才将它们写入文件。
我遇到的问题是,每次我运行“deletespecific”函数时,它都会删除最后索引的数据。
这只是 readdata 函数:
void readdata()
{
t=0;
file=fopen("Records.txt","r");
while(fread(&a[i],sizeof(a[i]),1,file)==1)
{
i++;
t++;
}
fclose(file);
}
编辑: 我没有在 readdata 中初始化为 0。 这是更新后的 readdata 函数:
void readdata()
{
i=0;
t=0;
file=fopen("Records.txt","r");
while(fread(&a[i],sizeof(a[i]),1,file)==1)
{
i++;
t++;
}
fclose(file);
}
如果您需要完整代码: fullcode
【问题讨论】:
-
在
readdata()中,为什么有两个计数器i和t?为什么它们是全球性的?为什么不初始化i? -
在寻求调试帮助时,一定要发布一套完整的代码。如果我们无法重现问题,我们将无法帮助您解决问题。见minimal reproducible example。
-
根据操作系统的不同,您可能需要在
fopen调用中使用"rb"和"wb"。 -
t是全局变量吗? -
@JohnnyMopp 正如你所说,我在 readdata 中初始化了 i,现在问题已解决。
标签: c function data-structures structure file-handling