2015-10-24 117 views
-1

我有一個問題,for循環只是繼續前進,當我調試它說,後n = 4,我= 4它自動分配i = 1 againt。我不知道有什麼不好,請大家幫忙(編碼c。與開發的C++)C:無法停止for循環

#include <stdio.h> 

int main(void) 
{ 
    int a[4][4] , sum = 0; 

    for (int n = 0 ; n <= 4 ; ++n) 
    { 
     printf ("enter row %d : ", n+1); 
     for (int i = 0 ; i <= 4 ; ++i) 
      scanf ("%d",&a[n][i]); 
    } 
    printf ("row totals : "); 
    for (int n = 0 ; n <= 4 ; ++n) 
    { 
     for (int i = 0 ; i <= 4 ; ++i) 
     { 
      sum += a[n][i]; 
      printf ("%d",sum); 
     } 
     sum = 0 ; 
     printf ("%d ",sum); 
    } 
    printf ("\ncolumn total : "); 
    for (int n = 0 ; n <= 4 ; ++n) 
    { 
     for (int i = 0 ; i <= 4 ; ++i) 
      sum += a[i][n]; 
     sum = 0 ; 
     printf ("%d ",sum); 
    } 
    return 0; 
} 
+0

*哪個* for for循環?你有六個。 – Beta

+0

沒有明顯的調試,DCV。 –

回答

0

分配int a[4][4]但在指數迭代循環出界。

for (int n = 0 ; n <= 4 ; ++n) 

根據你的初始化,一個指標進行

a[0][0], a[0][1],a[0][2],a[0][3] 
a[1][0], a[1][1],a[1][2],a[1][3] 
a[2][0], a[2][1],a[2][2],a[2][3] 
a[3][0], a[3][1],a[3][2],a[3][3] 

您覺得從去年a's指數3。所以,當你的循環for (int n = 0 ; n <= 4 ; ++n)迭代,n will be 0,1,2,3,4i will be 0,1,2,3,4其中4x4超出指數的a

所以,你需要改變初始化int a[5][5]

你可以嘗試這樣的:

int a[5][5] , sum = 0; 

    for (int n = 0 ; n <= 4 ; ++n) 
    { 
     printf ("enter row %d : ", n+1); 
     for (int i = 0 ; i <= 4 ; ++i) 
      scanf ("%d",&a[n][i]); 
    } 
1

當聲明數組作爲

int a[4][4]; 

有效的索引來訪問數組的元素是a[0][0] - a[3][3]

您在讀取數據時正在使用內存越界。

for (int n = 0 ; n <= 4 ; ++n) // that needs be n < 4 
{ 
    printf ("enter row %d : ", n+1); 
    for (int i = 0 ; i <= 4 ; ++i) // That needs to be i < 4 
     scanf ("%d",&a[n][i]); 
} 

因此,您的程序顯示未定義的行爲。

修復其他for循環中的類似錯誤。

2

您訪問索引超出限制,並在該索引處寫入導致未定義的行爲

int a[4][4] , sum = 0;   
for (int n = 0 ; n <= 4 ; ++n)   //goes out of bounds 
{ 
    printf ("enter row %d : ", n+1); 
    for (int i = 0 ; i <= 4 ; ++i)  // goes out of bound 
     scanf ("%d",&a[n][i]);   
} 

迴路從0 to 4(行5個元素和cloumns),但a因此4X4元件的2-d矩陣,有效索引0 to 3爲行和cloumns。與所有循環類似。

1.要麼CHANE循環條件i<4所有環路

OR

2.秒方式聲明a如 -

int a[5][5];   // matrix of 5X5 elements 
0

的數組下標從開始零。所以4個元素是0,1,2,3。你的循環應該從0開始,當它結束時結束HES 4,所以它應該是這樣的:

for (int i = 0 ; i < 4 ; ++n)

0

我有編譯你的代碼併成功執行。

它返回下面的輸出:

輸入行1:輸入第2行:輸入行3:行輸入4:輸入行5:行總計:-1217042128-1217042128-1217042128185799622718579962260 -1-12200988131854791911634862970-5823832860 -12172462561860502616186050261719950161267777694700 -121724665618604554321994974368212948856221294885630 1-107438404321461990619275694299275694290 列總數:0 0 0 0 0

click here和粘貼代碼網上編譯。