如何制作数组1 * x并总结其数字?

时间:2014-04-30 09:00:41

标签: c arrays numbers sum

所以我有这种类型的问题。如何制作一个数组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;
}

2 个答案:

答案 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;
 }