2017-06-14 49 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