从文本文件中逐行读取信息

3
我想学习如何逐行读取C中的.txt文件,以便可以在循环等中使用每行中的信息。我没有这方面的作业练习,但是我需要为一个天文包编写脚本而找出解决方案。

为此,我创建了一个名为list.txt的文件,其中包含数字1、2、3、4、5、6、7、8、9,每个数字都单独占据一行,我希望程序能够对每行的值进行求和。我还创建了一个名为sum.txt的输出文件,程序应该对行求和,并将总和打印到输出文件中。

运行程序时我遇到了错误,不确定问题出在哪里,因为我并不完全理解这个程序。我从C语言书籍中得到了这个程序,尝试修改以在我的计算机上运行。

之所以需要这样做,是因为我需要从列表中的每一行中获取信息(每行包含一个字符串)。但我首先要学习如何处理数字。

以下为代码:

#include<stdio.h>

int main(void)
{
    int a, sum = 0;
    FILE *ifp, *ofp;
    ifp = fopen("list.txt", "r");
    ofp = ("sum.txt", "w");
    while (fscanf(ifp, "%d", &a) == 1)
    {
        sum += a;
        fprintf(ofp, "The sum is %d. \n", sum);
        fclose(ifp);
    }
    return 0;
}

你遇到了什么错误?还有,我注意到你从未关闭“ofp”。 - Hasturkun
如果您遇到错误,请分享错误消息。 - Marc B
我收到的消息是 "expression (stream != NULL)"。抱歉,我应该注意到它可以编译,但在尝试调试时失败了。 - none
2个回答

6

你在这里忘记写 fopen 了:

ofp = ("sum.txt", "w");

另外,您应该将 fclose(以及可能的 fprintf)移出 while 循环,因为您只想在读取所有行后关闭文件。

@LauraBoyle: 你的输入文件fopen可能失败了。确保文件list.txt与可执行文件在同一目录下。 - codaddict
@codaddict:就是这样!谢谢!不是我保存在错误的目录下,而是我将它保存成了(list.txt).txt。 - none

0

在循环结束后关闭输入文件,并将 fprintf 移到循环外:

} // end of while loop
fprintf(ofp, "The sum is %d. \n", sum);
fclose(ifp);

同时不要忘记进行错误检查,并确保在继续对文件进行IO之前已经将它们打开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接