计算数组中整数的总和
我不知道我是否只是一个傻瓜,很可能是我,这是一个漫长的一天,但这不是按我想要的方式工作的,并且,好吧,我不明白为什么。计算数组中整数的总和
它应该能够输入11个数字,每行上有一个新数字,将它们添加到数组中,然后累加它们,但它不起作用。即使我正在增加i,它也不会停止退出循环。
任何想法?
int main(void) {
int array[10];
int i;
int sum = 0;
for (i = 0; i < 11; i++){
scanf("%d", &array[i]);
}
for (i = 0; i < 11; i++) {
sum += array[i];
}
printf("%d", sum);
return 0;
}
您在阵列中有10个元素,编号为0 - 9。您正在溢出缓冲区,所以所有投注都关闭。这是未定义的行为。
啊jees,我知道这是愚蠢的东西,我认为10个元素数组意味着0到10,因此有11个元素。只是我是愚蠢的 – PnP
我的猜测是缓冲区溢出,因为for循环读取11个数字,第11个数字被存储在数组之外,可能会覆盖i。
尝试在for循环中将11更改为10。
您正在将十一个数字存储到一个大小为10的数组中。因此,您将最后一个元素存储在边界之外,这会调用未定义的行为。
,这个不确定的行为表现为你的情况的无限循环可能是i
存储array
后在内存系统上,当你写一个数字,array[10]
(这是出界,正如我所说的原因),你正在覆盖i
。因此,如果您输入的数字小于11,则会导致循环继续并再次请求输入。
如果一个数组是[10],那么每个数组都从它的索引号0开始,所以这里它将有10个元素;考虑到他们的职位将从0开始到9,计数会给出10个元素。
你可以试试这个:
main()
{
int a[10], i, n, sum=0;
printf("enter no. of elements");
scanf("%d",&n);
printf("enter the elements");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n;i++)
sum=sum+a[i];
for(i=0;i<n;i++)
printf("\n a[%d] = %d", i, a[i]);
printf("\n sum = %d",sum);
getch();
}
你必须与你的数组定义的问题。您正在定义一个大小为10 array[10]
的数组,并说程序计算导致内存溢出的元素之和。
要更正程序,只需将数组的大小增加为array[11]
即可。另外如果你愿意,你可以检查recursive approach to find sum of array elements。
int main()
{
int a[10];
int i,j;
int x=0;
printf("Enter no of arrays:");
scanf("%d",&j);
printf("Enter nos:");
for(i=0;i<j;i++)
{
scanf("%d",&a[i]);
}
for (i=0;i<j;i++)
{
x=x+a[i];
}
printf("Sum of Array=%d",x);
return 0;
}
试试这个:
void main() {
int array[10];
int i;
int sum = 0;
for (i = 0; i < 11; i++){
scanf("%d", &array[i]);
}
for (i = 0; i < 11; i++) {
sum = sum + array[i] ;
}
printf("%d", sum);
return 0;
}
您的阵列只具有空间10个元素。 – Lee
如果声明一个由10个整数组成的数组,则有效索引从0到9;在你的代码中,你也可以使用array [10],它是十个数组中的第11个元素。我根本不知道C,但我想这可能是一个问题。我的2美分 –
它是“咬”我们许多人在某个时候或另一个时候,并不总是当我们是初学者。如果你在基于C的语言和少数1个原始数组语言之间来回移动,那么特别容易混淆。 –