我有以下代码:
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数据时,问题就消失了。但这不符合我的要求。
答案 0 :(得分:2)
man scanf说你需要l
修饰符才能读取双精度词:
fscanf(fp, "%lE %lE...
等等。
答案 1 :(得分:0)
使用%lE
指定double
而不是float
。
答案 2 :(得分:0)
%E
适用于float
s;对于double
,您必须使用%lE
。
可悲的是,printf
和scanf
之间的不一致并没有帮助(printf
不支持float
,因为float
类型的所有可变参数都是隐式转换为double
,但scanf
确实在两种FP类型之间产生差异)