int main(void)
{
int x=0;
double sum = 0;
int cnt;
double average=0;
printf("请输入数字的数量:");
scanf("%d",&x);
if(cnt>0){
number[cnt];
printf("请输入数字:");
scanf("%d", &x);
while (x != -1) {
number[cnt] = x;
sum += x;
cnt++;
scanf("%d", &x);
}
if (cnt > 0) {
average = sum / cnt;
for (int i = 0; i < cnt; i++) {
if (number[i] > average) {
printf("%d",number[i]);
}
}
}
}
while (1);
return 0;
}
这个代码中,数组的长度是否可以用一个变量代替
可以搜索C语言 VLA(变长数组)了解。
总之就是C99版本新增了这种写法,但是并不是必需特性,也不推荐这么写。课上一般直接就说不能这么写了。
这个功能用 int * number = (int*) malloc(sizeof(int) * cnt);
实现,malloc函数会申请cnt个int大小的空间,并返回首地址。
此时number就和你所想的int number[cnt]
一致了,就可以像使用数组那样使用它了。
这种方法涉及到指针,可以跳到指针的部分看一看指针和数组的关系加以了解。
以下是一个例子:
int cnt = 0;
scanf("%d", &cnt);
int * number = (int*) malloc (sizeof(int) * cnt);
for (int i = 0; i < cnt; i++) {
scanf("%d", &number[i]);
}
for (int i = 0; i < cnt; i++) {
printf("%d ", number[i]);
}
该函数需要 #include <stdlib.h>
谢谢了,懂了
你是指什么?是在声明的时候写成int number[x]的形式吗?
printf("请输入数字的数量:");
scanf("%d",&cnt);
if(cnt>0){
int number[cnt];
希望数组的长度是可变的,通过scanf输入
@新手小白。:
这样写完全可以,没有语法错误。C++应该允许整型变量做数组下标的个数。(不过这类场合还是建议使用malloc和指针建立动态数组,如下:)
printf("请输入数字的数量:");
scanf("%d",&cnt);
int number;
if(cnt>0){
number=(int)malloc(cnt*sizeof(int));
@计算机知识杂谈: 好的多谢了
@计算机知识杂谈: 但我在vs2019下运行会报错,说不允许这样写,是vs2019不支持c99吗
@新手小白。:
应该是的
@计算机知识杂谈: 一般写c的话用哪个比较好些
@新手小白。:
我一直用dev c++的。学校机房装的也是这个。
@计算机知识杂谈: 好的,谢谢了
可以简单了解下Markdown,自己做笔记或者提问都能做到更漂亮的形式
– 给给龙 3年前