-1

因此,如果我有一个包含多个数字的文件,并且我使用

fp = fopen (filename, "r");

那么现在我可以正确读取文件的内容了吗?我怎么能对文件做点什么。就像在这个文件中一样,有数字,我希望能够将它们相加。

fscanf(fp) 

将是什么应该是正确的开始?但我不确定除此之外还能做什么。什么代码代表我正在打开的文件中的项目?如果是“x”,那么我想将所有“x”相加,然后除以文件总数。

如何使用文件中的变量并用它们做事?


编辑代码:

if (fp != NULL)
{
     while (fscanf(fp, "%lf", &d) == 1)
     sum += d;
     mean = sum / total;

     printf ("The number of data values read from this file was %.0lf\n", total);
     printf ("\n%.2lf\n", mean);

     fclose(fp);
}

if (fp != NULL)
{
    do
    {
        c = fgetc(fp);
        if (c != EOF)
        {
            if ((char)c == '\n')
            total++;
        }
    } while (feof(fp) == 0);
4

3 回答 3

1

添加从文件中读取的数字的简单示例(未强化)...

#include <stdbool.h>
#include <stdio.h>

int main(int argc, char** argv)
{
    float sum = 0;
    float eachValue;
    FILE *fp;
    fp = fopen(argv[1], "r");
    while (true)
    {
        int scanned = fscanf(fp, "%f\n", &eachValue);
        if (scanned == 1)
        {       
            sum += eachValue;
        }
        else
        {
            break;
        }
    }
    fclose(fp);
    printf("%f\n", sum);
}

对于硬化,您应该执行诸如处理空行、验证是否有要打开的 arg[1]、处理没有要打开的文件或在打开过程中出现其他错误等情况。

于 2012-12-03T20:40:08.400 回答
0

通常,您可以使用许多函数从文件中读取。

int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int fscanf(FILE *restrict stream, const char *restrict format, ...);
size_t fread(void *restrict ptr, size_t size, size_t nitems,FILE *restrict stream);

根据您的要求使用其中任何一种。

例如,正如您所说,您必须添加文件中的数字。

因此,尝试使用上述任何函数从文件中读取 char 数组,然后使用分隔符(在文件中分隔数字的字符)将数组解析为整数数组或不同的数字。然后很容易找到总和。

你应该看到man strtod

还有这个人strtok

于 2012-12-03T19:57:26.363 回答
0

如果文件中的唯一内容是有效数字,这将起作用。实际上,它会一直工作到第一个不是有效数字的文本:

#include <stdio.h>

int main(void)
{
    double sum = 0.0;
    char const *filename = "data.file";
    FILE *fp = fopen(filename, "r");
    if (fp != 0)
    {
        double d;
        while (fscanf(fp, "%lf", &d) == 1)
            sum += d;
        fclose(fp);
    }
    printf("%g\n", sum);
    return(0);
}

作为一般规则,如果一个函数成功打开一个文件,它应该在完成后关闭它。在这个例子中,系统无论如何都会关闭文件,但养成良好的习惯也是如此。稍加注意,您可以区分格式错误(从 0 返回值fscanf())和 EOF 或 I/O 错误。

于 2012-12-03T20:18:44.413 回答