0

我有一个程序,我试图将风数据添加到 .txt 文件中,但我面临添加数据的问题,我关闭程序,尝试再次添加数据,它会消除其余数据。以下是 .txt 文件的示例:

3
3.60000 N
4.30000 E
5.40000 S

第一行是数据条目的数量,接下来是每个风速,然后是风向。

如果我只添加一次数据并完成它,我的代码可以正常工作,但如果我想在以前所做的工作中添加更多工作,则不行。我知道我可以使用 append 将数据添加到末尾,但它不会更新顶部的计数器。我希望能够添加数据并更新顶部的计数器。我需要代码中其他功能的计数器。以下是我的问题代码:

void addWindData(FILE* outFile, int numNumbers, double windSpd[], char windDir[]){
    int numItems;
    
    printf("How many data items would you like to add? ");
    scanf("%d", &numItems);

    fprintf(outFile, "%d \n", numItems);

    for(int i = 0; i < numItems; i++){
        printf("Wind speed? ");
        scanf("%lf", &windSpeed[i]);

        printf("Wind direction? ");
        scanf(" %c", &windDir[i]);

        fprintf(outFile, "%lf %c \n", windSpd[i], windDir[i]);
    }
}

我这样调用函数:

fp = fopen(FILE_NAME, "w");
if(fp == NULL){
    printf("File could not be found! \n");
}
else{
    addWindData(fp, numNumbers, windSpd, windDir);
    fclose(fp);
}

我能得到的任何帮助将不胜感激。我知道'w'总是会写,但是当我使用追加时,它会在最后开始一个新的计数,然后添加数据。我只需要帮助弄清楚如何更新计数器!我对 C 编程语言非常陌生,并且仍在努力学习。我正在尽力使用逻辑和推理,所以它可以帮助我从别人那里获得灵感!先感谢您!

4

2 回答 2

0

您可以更改fp = fopen(FILE_NAME, "w")为,fp = fopen(FILE_NAME, "r+")因为 w 模式将删除 .txt 文件中的先前文本,但 r+ 不会,因为 r 是升级模式。

于 2020-08-07T06:18:37.857 回答
0

文件作为流打开,因此您有 2 个选择:更改字符或重写所有文件。您必须知道您只能更改现有字符!正如fopen 参考所说,要更改字符,您可以使用“r+”模式。此模式允许读/写,从头开始并允许倒带

于 2020-08-07T05:47:37.247 回答