如何从文件中读取数字并将它们的平均值保存到同一个文件中?

时间:2014-01-19 12:55:34

标签: c file fopen

我有一个包含两列的txt文件:

1 2
3 4
5 6
7 8

我想读取这些数字,计算平均值并将结果保存到同一文件的第三列。我打开了我的文件以进行更新"r+",但似乎无法正常工作。阅读很好,但是当我添加第三列时,文件发生了错误......似乎它被重写了,当我在第一个循环指令之后调用fun时没有原始内容。有任何想法吗?

#include <stdio.h>
#include <stdlib.h>

void fun(const char *filename)
{
    double num1 = 0, num2 = 0, num3 = 0;
    FILE *f;
    if((f = fopen(filename, "r+")) == NULL)
    {
        exit(-1);
    }

    while(fscanf(f, "%lf %lf", &num1, &num2) != EOF)
    {
        //printf("num1 = %.2f, num2 = %.2f\n", num1, num2);
        num3 = num1 + num2;
        fprintf(f, "%lf %lf %lf\n", num1, num2, num3/2.0);
    }

    fclose(f);
}

int main(int argc, char **argv)
{
    fun("numbers.txt");

    return 0;
}

当我的程序结束执行时,我想在我的txt文件中有3列:

1 2 1.5
3 4 3.5
5 6 5.5
7 8 7.5

也试过这个,但我的程序只是挂掉了:

#include <stdio.h>
#include <stdlib.h>

void fun(const char *filename)
{
    double num1 = 0, num2 = 0, num3 = 0;\

    FILE *f;
    if((f = fopen(filename, "r+")) == NULL)
    {
        exit(-1);
    }

    int write_at = 0, read_at = 0;

    while(fscanf(f, "%lf %lf", &num1, &num2) != EOF)
    {
        read_at = ftell(f);
        fseek(f, write_at, SEEK_SET);
        num3 = num1 + num2;
        fprintf(f, "%lf %lf %lf\n", num1, num2, num3/2.0);
        write_at = ftell(f);
        fseek(f, read_at, SEEK_SET);
    }

    fclose(f);
}

int main(int argc, char **argv)
{
    fun("numbers.txt");
    return 0;
 }

1 个答案:

答案 0 :(得分:1)

打开一个临时文件并将结果保存在那里。成功完成阅读全部&#34; numbers.txt&#34;并写入临时文件,删除原始文件并重命名临时文件。

通过文件处理,这具有很好的优势,如果进程以某种方式失败(IO错误,数据格式错误等),原始文件仍然完好无损。与编辑相当普遍。

另一种方法是存储&#34;新&#34;将文件存储在内存中并在最后写出来。