2017-06-14 42 views
2

我正在读两个数组及其长度,并试图找出每个数组的总和。C溢出或是什么?

我得到它正确的一个,但对于其他部分,我不知道发生了什么?有人可以看看它,帮助我吗?

int m, n, snum, i, smun; 
scanf("%d",&m); 
int num[m]; 
for (i=0;i<m;i++) { 
    scanf("%d",&num[i]); 
    snum+=num[i]; 
} 
scanf("%d",&n); 
int mun[n]; 
for (i=0;i<n;i++) { 
    scanf("%d",&mun[i]); 
    smun+=mun[i]; 
} 
printf("%d %d ",smun,snum); 

这个代码,我可以有效地得到SMUNSNUM永远是错的? 即

for input: 

5 
-2 -1 0 1 2 
6 
-3 -2 -1 1 2 3 
my out put is: 0 -291502240 
+4

'int m,n,snum,i,smun;' - 你认为在这一点上什么数字在snum中? – immibis

回答

5

您需要将sum变量初始化为某个值。

int m,n,snum,i,smun; 
snum=0; 
smun=0; 
scanf("%d",&m); 
int num[m]; 
for (i=0;i<m;i++){ 
    scanf("%d",&num[i]); 
    snum+=num[i]; 
} 
scanf("%d",&n); 
int mun[n]; 
for (i=0;i<n;i++) { 
scanf("%d",&mun[i]); 
smun+=mun[i]; 
} 
printf("%d %d ",smun,snum); 

当变量被分配一个地址时,它会将该地址处的数据作为垃圾或垃圾值。第一个输出是正确的,因为你很幸运,地址中的值为零。

2

差不多不确定的行为,因为你做了

int m,n,snum,i,smun; 

然后积累到SNUM这在未初始化

snum+=num[i]; 

做这样的事情

int m = 0; 
int n = 0; 
int snum = 0; 
int i = 0; 
int smun= 0; 

将提供正确的初始化和结果

+0

是不是把所有的undefined都设置为0?还是仅仅是java?但是smun如何正确计算? – user7703770

+2

Nop ...在c或C++中没有默认值。 –

+2

所以这些变量持有垃圾 –

2

你没有初始化的SNUM和SMUN,它应该是snum = 0; smun = 0;第一然后操纵的总和。

+1

int num [m]和int num [n],是不是指定数组的长度? – user7703770

+0

@ user7703770对不起,错过了那部分,我的不好 – Hatik