2016-04-13 52 views
-1

我是一個完整的初學者,我正在練習將數組傳遞給函數。我編寫了一個程序,將二維數組作爲輸入並找出各個列的總和。 當我編譯程序時我沒有任何錯誤,但是一旦我運行它,我就會看到一個對話框,顯示「untitled5.exe停止工作」,其中untitled5是文件名。 我得到了這個錯誤不少次。我已經使用dev C++和codeblocks來編譯我的程序,所以這是什麼原因?這是我的代碼,編譯器還是筆記本電腦的問題?將數組傳遞到函數,file.exe停止工作

#include<stdio.h> 
void summation (int arr[][5], int size); 
int main() 
{ 
    int n,arr[n][5],sum,i,j; 
    printf("enter the number of rows"); 
    scanf("%d",&n); 
    for (i=0;i<n;i++) 
    { 
     for (j=0;j<5;j++) 
    { 
     printf("%d,%d th element is",i,j); 
     scanf("%d",&arr[i][j]); 
    } 
    } 
    summation (arr,5); 
    return 0; 
} 
void summation (int arr[][5], int size) 
{ 
    int i,j,s=0; 
    for(j=0;j<5;j++) 
    { 

     for (i=0;i<5;i++) 
     { 
      s=s+arr[i][j]; 
     } 
     printf("%d",s); 
    } 

} 
+2

n在數組定義之前未被初始化,這就是爲什麼 – Pooya

回答

0

main()您使用i來索引陣列的第一維度。在summation()中,您正在使用i來索引數組的第二維。我認爲當main()沒有填滿那麼多的數組(例如,當你輸入2的行數)時,你會超出summation()中第一個維度的末尾。

我想你想

summation (arr,5); 

而且,裏面summation()

for (i=0;i<size;i++) 
{ 
    s=s+arr[i][j]; 
} 
0
#include<stdio.h> 
void summation (int arr[][5], int size, int rows); 
int main() 
{ 
    int n, sum, i, j; 
    printf("enter the number of rows"); 
    scanf("%d",&n); 
    int arr[n][5]; 
    for (i=0;i<n;i++) 
    { 
     for (j=0;j<5;j++) 
    { 
     printf("%d,%d th element is",i,j); 
     scanf("%d",&arr[i][j]); 
    } 
    } 
    summation (arr, 5, n); 
    return 0; 
} 
void summation (int arr[][5], int size, int rows) 
{ 
    int i,j,s=0; 
    for(i=0;i<rows;j++) 
    { 

     for (j=0;i<size;i++) 
     { 
      s=s+arr[i][j]; 
     } 
    } 
    printf("%d",s);  
} 

所以第一關,我搬到你的數組聲明已初始化後n和使其等於什麼。

然後你的下一個問題是你可能會超出你的求和函數的界限。你的2dray中總是有5列,但是你可以有不同數量的行。將行數n傳入函數求和中,以確保不會超出界限。