scanf无法正确保存值

时间:2019-02-09 17:00:42

标签: c printf scanf

在我定义的函数中使用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大数。 但这并不一致,因此其他输入将提供类似的输出

1 个答案:

答案 0 :(得分:3)

要将scanf的结果写入double,请使用%lf%f用于float

请勿将%ddouble一起使用。 %d用于int

(打印时,%lf%f可以使用floatdouble。这是因为float的值会自动提升调用double时,或调用参数与参数中的printf对应的任何函数或没有原型声明的任何函数时,将其设置为...值。)