2014-12-04 175 views
0

當我在自身內部運行函數「check_row」時,我試圖傳入數組「sudoku_temp」的方式有問題,但我不確定我是什麼做錯了。我錯過了什麼嗎?無法將數組傳遞給遞歸函數C++

int check_row(int j_position, int generated_value, int sudoku_temp[][9]){ 
for (int i_position = 0; i_position < 9; i_position++) 
{ 
    if (generated_value == sudoku_temp[i_position][j_position]) 
    { 
     generated_value = generate_number(); 
     check_row(j_position, generated_value, sudoku_temp[][j_position]); 
    } 
    else 
     return generated_value; 

} 

}

爲了澄清,問題是當我嘗試內部本身的函數調用。謝謝。

+0

這是什麼問題?如果是編譯錯誤,請將其粘貼到此處。 – Kelm 2014-12-04 05:01:13

+0

sudoku_temp [] [j_position] 錯誤:預期的表達 – Eskimu 2014-12-04 05:04:11

+0

希望這可以幫助你一點: http://stackoverflow.com/questions/8767166/passing-a-2d-array-to-ac-function – Han 2015-12-18 22:10:28

回答

0

當你想從數組中提取一個值時,你不能像你那樣留下空括號。另一方面,函數原型看起來很相似,並且非常好。爲什麼?

int sudoku_temp[][9] // A 2D array of integers second dimension of which is of size 9 

或者換句話說,大小9.我們不是告訴編譯器的陣列真的有多大,我們不必在這種情況下,它是陣列(未知大小的)數組只是給我們一個論點。

另一方面,當訪問元素時,我們不能留下空括號,原因很簡單:我們想訪問一個元素,編譯器必須知道哪一個元素。切割到追逐 - 刪除空[]應該解決您的問題。

+0

我想我的問題是,我第二次嘗試將數組傳遞給check_row(第8行),我不知道該怎麼做。我傳遞的數組來自我的主函數,所以當我處於check_row函數時,我不知道如何調用它。 – Eskimu 2014-12-04 05:24:43

+0

其實我再看看你的代碼。你應該嘗試一些關於數組的在線課程,他們首先在C中很難理解,尤其是多維的。 – Kelm 2014-12-04 05:28:00

+0

我會嘗試一下,感謝您的幫助! – Eskimu 2014-12-04 05:34:48

0

使用一個變量而不是像9那樣的固定長度。因爲在遞歸中參數可能不同。

int check_row(int j_position, int generated_value, int sudoku_temp[][n]) 
{ 
    for (int i_position = 0; i_position < n; i_position++) 
    { 
     if (generated_value == sudoku_temp[i_position][j_position]) 
     { 
      generated_value = generate_number(); 
      check_row(j_position, generated_value, sudoku_temp[][j_position]); 
     } 
     else 
      return generated_value; 

    } 
} 
+0

問題實際上是與函數內部的函數,抱歉的混淆。 – Eskimu 2014-12-04 05:21:08