2017-04-15 95 views
-2

所以我工作的一個程序,我初始化一個二維數組以零,像這樣:爲什麼我的程序編譯但沒有做任何事情?

int studentGrades[3][2]; 

    for(i = 0; i <= 3; i++){ 
    for(j = 0; j <= 2; j++){ 
     studentGrades[i][j] = 0; 
    } 
} 

printf(" %d", studentGrades[1][2]); 

這編譯,但在控制檯中沒有做任何事情,而不會提前過去的這一點。

我已經看了很久,我只是無法破解它。 謝謝!

編輯:對不起,我忘了在代碼的下面添加一行以便在數組中打印出一個位置,但程序沒有通過循環。

+0

閱讀[問],特別是關於只包括一個[mcve] - 不是一個片段,而不是所有的代碼。 –

回答

2

您顯示的問題是循環中的<=。由於數組是基於0的,因此最後一個可尋址的位置是n-1,其中n是循環的大小。所以你肯定會越過你的數組的邊界。這會在某個時候造成問題。此外,您並未聲明ij,但這會被編譯器捕獲,因此您必須在某處。

至於你爲什麼沒有看到任何輸出,你上面的代碼沒有什麼打印任何東西。

你需要一個循環來打印結果。像這樣的東西。

for(int i = 0; i < 3; i++) { 
    for(int j = 0; j < 2; j++) { 
     print("Grade[%d][%d]: %d\n", i, j, studentGrades[i][j]); 
    } 
} 
+0

不幸的是,在調試的最微不足道的嘗試之後,它會顯而易見地變得明顯,比如像你所做的那樣在內部放置一個printf。 – ThingyWotsit

1

...但沒有做控制檯什麼...

你還指望它在控制檯呢?您從來沒有在您提供的代碼片段中調用打印語句或從標準輸入讀取。

作爲擡頭,這是不正確的循環:

int studentGrades[3][2]; 

for(i = 0; i <= 3; i++){ 
    for(j = 0; j <= 2; j++){ 
     studentGrades[i][j] = 0; 
    } 
} 

你的數組是3x2的,所以你不能訪問索引studentGrades[3]studentGrade[AnyNumber][2]。您可訪問的索引範圍爲0-2行和0-1列。因此,你的循環應該是:

int studentGrades[3][2]; 

for(i = 0; i < 3; i++){ 
    for(j = 0; j < 2; j++){ 
     studentGrades[i][j] = 0; 
    } 
} 

至於爲什麼你沒有得到控制檯I/O,我不知道,因爲提供的代碼片段並不曾嘗試與控制檯接口。

1

我假設你的意思是你期望從上面發佈的代碼中獲得某種輸出。您的代碼中沒有任何內容,例如將輸出寫入控制檯的printf。要做到這一點,您必須通過執行#include <stdio.h>來包含預處理器指令,然後使用printf將數組的內容打印到控制檯。

相關問題