双转换字符串

时间:2011-10-21 19:31:47

标签: c string

我有以下代码:

FILE *fp;
double Data[9][7];
int i=0,k;                  
fp = fopen ( "dstest 2.mod", "r" ) ;
fscanf(fp, "%E %E %E %E %E %E %E*[ ]",
           &Data[i][0],
           &Data[i][1],
           &Data[i][2],
           &Data[i][3],
           &Data[i][4],
           &Data[i][5],
           &Data[i][6] );

但每当我运行它时,我都会收到以下警告:

Read.c:12:警告:格式'%E'需要类型'float *',但参数3的类型为'double *'

它适用于所有参数(Data [i] [j])。我不知道出了什么问题。当我使用float Data而不是double数据时,问题就消失了。但这不符合我的要求。

3 个答案:

答案 0 :(得分:2)

man scanf说你需要l修饰符才能读取双精度词:

fscanf(fp, "%lE %lE...

等等。

答案 1 :(得分:0)

使用%lE指定double而不是float

答案 2 :(得分:0)

%E适用于float s;对于double,您必须使用%lE

可悲的是,printfscanf之间的不一致并没有帮助(printf不支持float,因为float类型的所有可变参数都是隐式转换为double,但scanf确实在两种FP类型之间产生差异)