我不知道我是不是一个完全傻瓜,我很可能是,这是漫长的一天,但这不是我想要的工作,而且,我看不到为什么。
它应该能够输入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;
}
答案 0 :(得分:5)
数组中有10个元素,编号为0 - 9.您正在溢出缓冲区,因此所有投注均已关闭。这是未定义的行为。
答案 1 :(得分:3)
您不能将十一个条目添加到十元素数组中。
答案 2 :(得分:3)
我的猜测是缓冲区溢出,因为for循环读取11个数字,第11个数字存储在数组外部,可能会覆盖i。
尝试在for循环中将11更改为10。
答案 3 :(得分:2)
您将11个数字存储到大小为10的数组中。因此,您将最后一个元素存储在边界之外,这会调用未定义的行为。
这种未定义的行为在您的情况下表现为无限循环的原因可能是i
存储在系统内存array
之后以及当您将数字写入array[10]
时(正如我所说,这是超出范围的),你正在覆盖i
。因此,如果您输入的数字小于11,这将导致循环继续并再次请求输入。
答案 4 :(得分:1)
如果一个数组是[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();
}
答案 5 :(得分:0)
您的阵列声明存在问题。您正在定义一个大小为10 array[10]
的数组,并说该程序计算导致内存溢出的 11 元素的总和。
要更正程序,只需将数组大小增加为array[11]
。如果您愿意,也可以查看recursive approach to find sum of array elements。
答案 6 :(得分: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;
}
答案 7 :(得分:0)
int main()
{
//this the sum of integers in an array
int array[] = { 22,2,2,1,5,4,5,7,9,54,4,5,4 },x,sum=0;
int cout_elements = sizeof(array) / sizeof(int);
for (x = 0; x < cout_elements; x++) {
sum += array[x];
}
printf("%d",sum);
return 0;
}
答案 8 :(得分:-1)
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;
}