在我定义的函数中使用scanf来更改通过引用传递给该函数的数组中的值时,它根本不会更改值,而它是double类型。
当我将占位符从以下位置更改时: scanf(“%1f”,&x) 至 scanf(“%d”,&x) 它按预期工作,但我需要为此项目使用双打。
int main()
{
double varArray[MAX];
zeroFill(varArray);
}
void fill(double *array) {
for(int i =0; i<MAX; i++){
printf("what is index %d?\n", i);
scanf("%f",(array+i));
printf("%f \n", *(array+i));
}
与其更改该索引处的值,不如将其更改为0.000000或一个小数:
what is index 0?
1
0.000000
what is index 1?
2
0.000000
what is index 2?
3
-0.000000
what is index 3?
4
0.000000
what is index 4?
5
0.000000
what is index 5?
6
0.000000
what is index 6?
7
182043948477041810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
因此,对于输入3和7,它已返回-0.000000和v大数。 但这并不一致,因此其他输入将提供类似的输出
答案 0 :(得分:3)
要将scanf
的结果写入double
,请使用%lf
。 %f
用于float
。
请勿将%d
与double
一起使用。 %d
用于int
。
(打印时,%lf
或%f
可以使用float
或double
。这是因为float
的值会自动提升调用double
时,或调用参数与参数中的printf
对应的任何函数或没有原型声明的任何函数时,将其设置为...
值。)