如何使用scanf将float收集到数组

How to use scanf to collect float to array

代码看起来像这样

#include <stdio.h>

int main()
{
    int i,n,m;
    printf("Input Size of Array : ");
    scanf("%d",&m);
    float number[m];
    for(i=0;i<m;i++){
        n = n+1;
        printf("Number %d : ",n);
        scanf("%f", &number[i]);
    }
    printf("\nNumber in Order => ");
    for(i=0;i<m;i++){
        printf("%.2f ", &number[i]);
    }
}

最后。输出为 0.00 0.00 0.00 .....

那么为什么 scanf 没有将任何浮点数收集到数组中?我该如何解决这个问题?

你调用了未定义的行为,通过在行

中类型错误的密码数据
printf("%.2f ", &number[i]);

%f 期望 double,但 &number[i] 具有类型 float*.

删除&并将浮点值传递给printf。 (float 作为可变长度参数将自动转换为 double)

另外一个未定义的行为在行

被调用
n = n+1;

因为n的值没有被初始化就被使用了

还有一点是,您应该检查scanf()的return值,以检查它是否成功读取了预期数量的值。

固定码:

#include <stdio.h>

int main()
{
    int i,n = 0,m; /* initialize n */
    printf("Input Size of Array : ");
    if(scanf("%d",&m)!=1){ /* check if scanf() succeeded */
        fputs("read error\n", stderr);
        return 1;
    }
    float number[m];
    for(i=0;i<m;i++){
        n = n+1;
        printf("Number %d : ",n);
        if(scanf("%f", &number[i])!=1){ /* check if scanf() succeeded */
            fputs("read error\n", stderr);
            return 1;
        }
    }
    printf("\nNumber in Order => ");
    for(i=0;i<m;i++){
        printf("%.2f ", number[i]); /* remove extra & */
    }
}