所以我有这种类型的问题。如何制作一个数组1 * x,然后将其数字汇总在一起。我现在写下这样的东西。有任何想法吗?谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
int a,i,w,j,m;
int s[a];
printf("How many digits do you want to sum up\n");
scanf("%d",&a);
for(i=0;i<a;i++)
{
printf("Enter numer %d: ",i);
scanf("%d",&s[i]);
}
for(j=0;j<a;j++)
{
m=s[j]+s[j++];
}
printf("\n %d",m);
return 0;
}
答案 0 :(得分:0)
使用未初始化的变量是未定义的行为。
int s[a];
上面的语句定义了一个大小为s
的数组a
,但a
的值是不可预测的,因为它未初始化并包含垃圾。数组的大小在定义时必须是已知的,并且在整个生命周期内保持不变。您无法在此处更改a
的值来调整数组大小。您可以使用malloc
使用动态内存分配。
此外,以下语句再次调用未定义的行为 -
m=s[j]+s[j++];
这是因为它违反了C99标准§6.5¶2中所述的以下规则
在前一个和下一个序列点之间,一个对象应该具有它 通过表达式的评估,最多修改一次存储值。 此外,先前的值应只读以确定该值 存储。
答案 1 :(得分:0)
您的代码存在问题:
int a;
int s[a];
这里a
未初始化。所以,数组大小未知,这是不正确的。而且,而不是这个
m=s[j]+s[j++];
你应该这样做:
m += s[j];
还有一件事,你在开始添加之前初始化m = 0
。
我已将您的计划更改为:
#include <stdio.h>
int main(int argc, char *argv[]) {
int a,i,m = 0;
//First get the array size
printf("How many digits do you want to sum up\n");
scanf("%d",&a);
//Then declare the array with the size (a)
int s[a];
for(i = 0; i < a; i++){
printf("Enter numer %d: ",i);
scanf("%d",&s[i]);
m += s[i];
}
printf("\n %d",m);
return 0;
}