C 计算数组中整数的和

C 计算数组中整数的和,c,arrays,C,Arrays,我不知道我是否只是一个彻头彻尾的傻瓜,很可能是的,这是漫长的一天,但这不是我想要的,我不明白为什么 它应该能够输入11个数字,每行输入一个新数字,将它们添加到数组中,然后将它们相加,但它只是不起作用。它不会停止退出循环,即使我增加I 有什么想法吗 int main(void) { int array[10]; int i; int sum = 0; for ( i = 0; i < 11; i++){ scanf("%d", &array[i]); } fo

我不知道我是否只是一个彻头彻尾的傻瓜,很可能是的,这是漫长的一天,但这不是我想要的,我不明白为什么

它应该能够输入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;
int main(无效){
int数组[10];
int i;
整数和=0;
对于(i=0;i<11;i++){
scanf(“%d”和数组[i]);
}
对于(i=0;i<11;i++){
总和+=数组[i];
}
printf(“%d”,总和);
返回0;

}

不能将11个条目添加到10个元素的数组中。

数组中有10个元素,编号为0-9。你的缓冲区溢出了,所以所有的赌注都输掉了。这是未定义的行为。

我猜是缓冲区溢出,因为for循环读取11个数字,第11个数字存储在数组外部,可能会覆盖i


尝试将for循环中的11改为10

您正在将11个数字存储到一个大小为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();

}
main()
{        
int a[10],i,n,和=0;
printf(“输入元素编号”);
scanf(“%d”和“&n”);
printf(“输入元素”);

对于(i=0;i您的数组声明有问题。您正在定义一个大小为10的数组
array[10]
,并要求程序计算导致内存溢出的11个元素的总和

要更正程序,只需将数组的大小增加为
array[11]
。如果您愿意,也可以检查。

int main()
{
INTA[10];
int i,j;
int x=0;
printf(“输入数组的数目:”);
scanf(“%d”和“&j”);
printf(“输入编号:”);
对于(i=0;i试试这个:

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;
}
void main(){
int数组[10];
int i;
整数和=0;
对于(i=0;i<11;i++){
scanf(“%d”和数组[i]);
}
对于(i=0;i<11;i++){
总和=总和+数组[i];
}
printf(“%d”,总和);
返回0;
}
int main()
{
//这是数组中整数的和
int数组[]={22,2,2,1,5,4,5,7,9,54,4,5,4},x,sum=0;
int cout_elements=sizeof(数组)/sizeof(int);
对于(x=0;x
你的数组只有10个元素的空间。如果你声明一个10个整数的数组,有效的索引是从0到9;在你的代码中你还使用了数组[10],它是10个数组的第11个元素。我一点也不知道C,但我想这可能是个问题。我的2个整数被“咬”了我们中的许多人都有过这样或那样的经历,并不总是在我们还是初学者的时候。尤其是当你在基于C语言的语言和(少数)语言之间来回移动时,会感到困惑1-origin-array语言。但是数组从0开始,我认为从0到10,是11个元素。@user1048116虽然不是0-10,但总共有10个元素,所以从0开始,即从0到9Ah jees,我知道这很愚蠢,我认为10个元素的数组意味着0到10,因此是11个元素。。只是我很愚蠢有用,但对f不起作用或者这个特定问题中的任务。数组的元素必须键入(输入)而不是预定义的。
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;
}
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;
}