如何使用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 & */
}
}
代码看起来像这样
#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 & */
}
}