C的新手:我需要从文件中读取这行数据-2.628489e-03-1.194542e-03-1.073491e-02“;

C的新手:我需要从文件中读取这行数据-2.628489e-03-1.194542e-03-1.073491e-02“;,c,C,我尝试过%f%g%e和相同的长版本 例如,fscanf(填充,“%g%g%g”、&c0、&c1和c2) 导致 -1.1546e+09-1.16415e+09-1.13768e+09 有人能告诉我用什么格式吗?谢谢 c的情况?双倍 double c0,c1,c2; fsscanf(inFile, "%lf %lf %lf", &c0,&c1,&c2); c病例?是浮动的 float c0,c1,c2; fsscanf(inFile, "%f %f %f", &c0

我尝试过%f%g%e和相同的长版本

例如,
fscanf(填充,“%g%g%g”、&c0、&c1和c2)

导致

-1.1546e+09-1.16415e+09-1.13768e+09

有人能告诉我用什么格式吗?谢谢

c的情况?双倍

double c0,c1,c2;
fsscanf(inFile, "%lf %lf %lf", &c0,&c1,&c2);
c病例?是浮动的

float c0,c1,c2;
fsscanf(inFile, "%f %f %f", &c0,&c1,&c2);

使用正确的格式

#include <stdio.h>

int main(void) {
    float f1, f2, f3;
    double d1, d2, d3;
    long double l1, l2, l3;

    fscanf(stdin, "%f%f%f", &f1, &f2, &f3);    /* scan floats */
    fscanf(stdin, "%lf%lf%lf", &d1, &d2, &d3); /* scan doubles */
    fscanf(stdin, "%Lf%Lf%Lf", &l1, &l2, &l3); /* scan long doubles */

    printf("floats: %f %f %f\n", f1, f2, f3);   /* print floats (they're automagically converted to doubles) */
    printf("doubles: %f %f %f\n", d1, d2, d3);  /* print doubles */
    printf("longs: %Lf %Lf %Lf\n", l1, l2, l3); /* print long doubles */

    return 0;
}
#包括
内部主(空){
浮球f1、f2、f3;
双d1、d2、d3;
长双l1、l2、l3;
fscanf(标准输入,“%f%f%f”,&f1,&f2,&f3);/*扫描浮动*/
fscanf(标准格式,“%lf%lf%lf”、&d1、&d2、&d3);/*扫描双精度*/
fscanf(标准输入,“%Lf%Lf%Lf”、&l1、&l2和&l3);/*扫描长双倍*/
printf(“浮动:%f%f%f\n”,f1,f2,f3);/*打印浮动(自动转换为双精度)*/
printf(“双精度:%f%f%f\n”,d1、d2、d3);/*双精度打印*/
printf(“长:%Lf%Lf%Lf\n”,l1、l2、l3);/*打印长双精度*/
返回0;
}

参见

你看了
c0
c1
c2
是如何声明的吗?@荒谬:关于参考,我查了一下。我重新格式化了数据文件(行尾没有“”符号),并用代码重新读取了文件。它起作用了@Currie:as float用于上面的示例。@Amar:大多数scanf转换说明符(除了
%c“
“%[…]”和
%n“
)都包括忽略前导空格。您的示例格式字符串和
“%g%g%g”
执行完全相同的操作。我甚至可以说scanf格式字符串中的空格在大多数情况下是多余的。。。有时甚至会出现错误。我从未见过ideone.com,thanx的提示:)谢谢你的代码。我也尝试过所有这些格式,但都没有用。