从文件中读取%le

问题描述 投票:1回答:1

我正在尝试用fscanf读取输入文件中的3个双打,但是在尝试这样做时我遇到了段错误。我的代码如下:

    FILE * infile = fopen(argv[1], "r");
    double r_d, r, c;
    fscanf(infile, "%le %le %le", r_d, r, c);
    fclose(infile);

输入文件如下所示:

1.000000e+00 1.000000e+00 1.000000e+00

知道我哪里错了吗?我确信数据类型应该被理解为%le。

c file types scanf
1个回答
1
投票

scanf函数需要指向要使用值填充的对象的指针,因此:

fscanf(infile, "%le %le %le", &r_d, &r, &c);
//                            ^     ^   ^

会是一个更好的开始。如果没有address-of运算符,它很可能会使用变量的当前值(如果它们看起来是静态存储持续时间,将是任意的)作为写入值的指针。这不太可能结束:-)

我认为一个体面的编译器应该至少警告过你,参数的类型并不像预期的那样。如果确实如此,你应该养成不忽视这种警告的习惯。

© www.soinside.com 2019 - 2024. All rights reserved.