这个程序哪里出了问题・_・?

#include
int main()
{
int i, n, sum = 0;
int a[] = {0};
scanf_s("%d", &n);
for (i = 0; i < n; i++) {
scanf_s("%d", a[i]);
sum += a[i];
}
printf("%d", sum);

return 0;

}

7个回答

int a[] = {0};这个语句到底要分配多少个内存单元给数组变量a啊,一般来讲,程序分别数组都是规定的大小,必须明确!如果不知道到底多大的话,可以先用malloc来申请一些用,如果不够,再重新申请!

C语言不允许分配动态数组吧。

你可以先输入N,然后在根据N的数据去创建等大的INt 数组

**数组分配大小不明确,这样写的话在栈上分配,但数据栈大小有限,所以你也不知道系统到底分配了多大。所以一般不知道要给数组分配多大大小 时,尽量使用malloc分配。还有一处错误就是给数组中输入数字那块有错,应该是scanf__s("%d",&a[i]);这块应该是取地址,而不是格子里面的数,给了地址才能往里面写数字。
代码如下:
#include
#include
int main()
{
int i, n, sum = 0;
scanf_s("%d", &n);
int *a = (int *)malloc(n*4);
for (i = 0; i < n; i++) {
scanf_s("%d", &a[i]);
sum += a[i];
}
printf("%d", sum);
return 0;
}

一维数组需要确定的下标

1.先注意int a[]={0};这一条语句,它只是做了下面这样一个工作:定义一个a整型数组,大小为1,内容为{0}。所以下面访问到i(>1)的时候就越界了。应该改成:

int \*a=(int\*)malloc(sizeof(int)\*4);
memset(a,0,sizeof(a));

2.scanf后面要加一个地址,而a[i]不是一个地址,所以出错。应该改成&a[i]或a+i。
最终程序:

#include<stdio.h>
#include<malloc.h>
#include<string.h>
int main()
{
int i, n, sum = 0;
int *a=(int*)malloc(sizeof(int)*4);
memset(a,0,sizeof(a));
scanf_s("%d", &n);
for (i = 0; i < n; i++) {
scanf_s("%d", &a[i]);
sum += a[i];
}
printf("%d", sum);
return 0;
}

把a数组定义为全局变量:

#include .........
int a[10000];
using namespace std;
int main(){
    ........
}

1.include后面要有stdio.h这个头文件,要不然不会执行输入输出命令,这里面的i代表input输入,o代表output输出
2.应该是scanf而不是scanf_s。头文件识别不出这句命令。
3.第二个scanf处用法错误,应该是&a[i],&是取地址的意思,这个命令的第二个参数是个地址。
4.C语言无法定义动态数组。
参考程序如下:
#include
int main()
{
int i, n, sum = 0;
int a[50] = {0};
scanf("%d", &n);
printf("the amount of this num is :%d\n",n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
sum += a[i];
}
printf("the sum of this num is :%d", sum);
return 0;
}
我在定义数组时直接定义了一个静态数组,总数为50, 因为我定义的是50,所以在输入数的数量时要少于50个,这个可以根据需求改数。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问