Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将数组设为1*x并对其数字求和?_C_Arrays_Numbers_Sum - Fatal编程技术网

C 如何将数组设为1*x并对其数字求和?

C 如何将数组设为1*x并对其数字求和?,c,arrays,numbers,sum,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,

所以我有这种问题。如何将数组设为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;
}
#包括
#包括
#包括
/*使用控制台暂停器运行此程序,或添加您自己的getch、system(“暂停”)或输入循环*/
int main(int argc,char*argv[])
{
int a,i,w,j,m;
int s[a];
printf(“您希望合计多少位数字\n”);
scanf(“%d”和“&a”);

对于(i=0;i,使用未初始化变量是未定义的行为

int s[a];
上面的语句定义了一个大小为
a
的数组
s
,但是
a
的值是不可预测的,因为它未初始化并且包含垃圾。数组的大小在定义时必须是已知的,并且在其整个生命周期内保持不变。您不能通过在此处更改
a
的值来调整数组的大小。您可以使用
malloc
使用动态内存分配

此外,以下语句再次调用未定义的行为-

m=s[j]+s[j++];
这是因为它违反了C99标准§6.5’2中规定的以下规则

在上一个序列点和下一个序列点之间,对象应具有 通过表达式求值最多修改一次的存储值。 此外,应仅读取先前值以确定值 储存


您的代码存在以下问题:

             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;
 }
#包括
int main(int argc,char*argv[]){
int a,i,m=0;
//首先获取数组大小
printf(“您希望合计多少位数字\n”);
scanf(“%d”和“&a”);
//然后声明大小为(a)的数组
int s[a];
对于(i=0;i
m=s[j]+s[j++]
它不正确。你应该做一些类似于
m=m+s[j]
的事情。无论如何,我不知道代码的其余部分是否正确,但可以肯定的是,你的总数是不正确的。那么你的“问题类型”到底是什么?你能更具体一点吗?一些备注:你定义了
s[a]
之前,a
有一个有意义的值。另外,你不需要数组,只需要求和就可以了。但是请初始化你的变量。事实上,
m
可以从任何值开始。你的问题不精确:一个数字(可以有几个数字)与数字不一样。从你的问题来看,不清楚你是想添加
x
数字还是
x
数字。是的,对不起,我不是母语为母语的自然数,我写数字的地方。我知道和不正确,因为你写的我还没有那个j++数字。但是数组可以工作,问题是和,我没有知道怎么做。@1INTERFECTOR数组似乎只起作用,但它是错误的。正如我提到的,定义数组时,必须知道它的大小。此时,变量
a
包含垃圾。您可以在数组定义之后分配它。这并不意味着数组大小会相应地改变。它保持不变。您不知道它的大小因为
a
的大小在当时是未知值。我不可能成为任何语言开发人员,对吗?因为我有这样的问题,我的同事在10分钟内就解决了。不,不是那样的。这些事情发生在每个开发人员身上,每个人都从错误中学习。不犯错误你永远不可能成为任何东西的开发人员。但是没有你的帮助,我无法做到这一点,我认为这是错误的,我不应该朝着这个方向去编程。高效是需要时间的,不要沮丧。每个程序员在某个阶段都有相同的感觉,但当你有了基本的知识后,一切都会好起来的。祝你好运。