【问题标题】:Delete structure data from text file in C从C中的文本文件中删除结构数据
【发布时间】: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() 中,为什么有两个计数器it?为什么它们是全球性的?为什么不初始化i
  • 在寻求调试帮助时,一定要发布一套完整的代码。如果我们无法重现问题,我们将无法帮助您解决问题。见minimal reproducible example
  • 根据操作系统的不同,您可能需要在fopen 调用中使用"rb""wb"
  • t 是全局变量吗?
  • @JohnnyMopp 正如你所说,我在 readdata 中初始化了 i,现在问题已解决。

标签: c function data-structures structure file-handling


【解决方案1】:

变量t,一个全局变量,是数组a[]的偏移量(从0开始)。

因此,它的内容比a[] 数组中的条目数少1,而不是a[] 数组中的条目数。

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多