c - 没有从输入文件打印正确的值

标签 c

有人能告诉我哪里出错了吗?基本上我写了一些代码,应该从文件中获取值,然后打印文件中的第一个值作为输出以及文件中值的数量。

虽然我得到了正确数量的值,但输出中打印的第一个值与文件中的第一个值不同。这是代码:

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

int main()
{
    const char Project_Data[] = "filedata.dat";
    FILE *input = fopen(Project_Data, "r");

    int t = 0;
    int N = 0;
    float *a;

    a = (float*)malloc(N*sizeof(float));

    if(input != (FILE*) NULL)
    {
        while(fscanf(input, "%e", &a[t]) == 1)
        {
            N++;
            if(a[t] == EOF)
                break;
        }

        printf("first value in file: %e\n",a[0]);
        printf("number of values in file: %d\n", N);
    }
    else
        printf("coudlnt read input file.\n");

    return(0);
}

我觉得这与我使用 malloc 函数的方式有关。如果是这样,我该如何正确使用它?我想将我的值从文件读入一个大小为 N 的数组,但如果我事先不知道 N 的值,我该怎么办?


编辑:

这是文件中的一些值。这些值一个接一个地排序,它们之间有一个空格。因为值的数量非常大,它们在页面上形成了几个对角线(如果您以前有过的话)。

   9.0100000e+00   8.9663752e-01
   9.0200000e+00   1.5041077e+00
   9.0300000e+00   2.5992505e+00
   9.0400000e+00   1.5242828e+00
   9.0500000e+00   3.6815660e-01
   9.0600000e+00   5.4889676e-01
   9.0700000e+00   1.2371257e+00
   9.0800000e+00   1.2163317e+00
   9.0900000e+00   5.4318479e-01
   9.1000000e+00   1.5906641e+00
   9.1100000e+00   2.6775285e+00
   9.1200000e+00   1.1608307e+00
   9.1300000e+00   1.2084299e+00
   9.1400000e+00  -7.8752191e-01
   9.1500000e+00   6.4048690e-01
   9.1600000e+00   2.2727416e-02
   9.1700000e+00   1.0307653e+00
   9.1800000e+00   1.9435864e+00
   9.1900000e+00   2.9422693e+00
   9.2000000e+00   3.2184945e+00
   9.2100000e+00   1.3041157e+00
   9.2200000e+00   1.1018038e+00

左边的值不是订单;它们是真正的值(value),只是其他数据在我看来是数据中的“噪音”。

最佳答案

a = (float*)malloc(N*sizeof(float));

因为 N 设置为 0,所以您要分配 0 个字节?这看起来很麻烦。

关于c - 没有从输入文件打印正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450418/

相关文章:

c - 相同的程序给我不同的输出

c - _mm_cmpistrm SSE4.2 内在模式

c - c 中的 pow() 函数会产生截断(或舍入)错误?

c - 新交所飞地 : Where the actual function that does the procession goes and how it gets compiled

c - 为什么相同的浮点常量在 Fortran 和 C 中打印不同?

关于密码验证的 C 程序不起作用

c - 在代码块中使用 gcc 编译时使用命令行参数

c - 为什么基于 _WIN32 或 __linux__ 有条件地包含 direct.h 或 sys/stat.h?

c++ - int main(int argc,char* argv[]) 为什么argc给出2个参数?

c - 为什么函数中有 'static' 定义?