这是什么问题? 它显示了一个错误,请帮助我我是一个初学者。 我可以在数组中使用double吗?
#include <stdio.h>
int main()
{
double a;
scanf("%lf",&a);
double s[a];
double b,c=0, d;
for(b=0;b<a;b++){
scanf("%lf",&s[b]);
}
for(b=0;b<a;b++){
c = c + s[b];
d=b+1;
printf("%lf\n",c/d);
}
return 0;
}
答案 0 :(得分:4)
如果不清楚,则数组不能为双倍长度。这是未定义的行为。
这是因为double不是整数,而是可能是整数的有理数。了解此问题的一种简单方法是采用一些浮点值,例如3.5。
什么是长度为3.5的数组?连续内存中是否有3个半个大小的插槽? 3个插槽是否足够? 4? 3.5插槽可能是无用和意外的,如果它不是分数插槽,则可能不清楚并可能是意外的,因此行为不确定。
尽管其他人提出了创建整数类型的解决方案,但是您不能创建双精度长度的数组。您可以创建一个双精度数组,即
double arr[5];
但是您不能创建像这样的双倍长度数组
int arr[3.3];
答案 1 :(得分:2)
尽管现代C支持可变长度数组,但数组的大小必须为正且为整数。
相反,您可以舍入到最接近的size_t
:
size_t ASIZE = ceil(fabs(a));
double s[ASIZE];
包含<math.h>
可以访问ceil
和fabs
。
答案 2 :(得分:2)
使用此:
int a;
scanf("%d",&a);
剩下的代码都很好。
答案 3 :(得分:2)
您不能使用浮点类型(float
或double
)来指定数组大小或数组索引:
6.7.6.2数组声明符
约束
1除了可选的类型限定符和关键字static
外,[
和]
限定 表达式或*
。 如果它们分隔表达式(指定数组的大小),则 表达式应为整数类型。如果表达式是一个常量表达式,则应为 值大于零。元素类型不得为不完整或功能 类型。可选的类型限定符和关键字static
仅应出现在 具有数组类型的函数参数的声明,然后仅在最外面 数组类型派生。
6.5.2.1数组下标
约束
1其中一个表达式的类型应为“完成对象的指针 type ”,另一种则为 表达式应为整数类型,结果应为“ type ”类型。
同上。
因此a
和b
必须是整数类型-我通常将size_t
用于数组大小和索引变量:
size_t a;
printf( "Gimme the array size: " );
scanf( "%zu", &a );
double s[a];
for ( size_t b = 0; b < a; b++ )
scanf( "%lf", &s[b] );