2017-11-18 104 views
0

因爲我的代碼有點長,而且聽說只要符合本論壇的特定標準,我們就可以提出問題,我已經上傳了我的code into Google Drive在一個循環中中繼2D數組的狀態

把我的問題納入的話,假設compare功能是在我main執行後的第一個循環完成後,while循環我主要是因爲currentprogress[x][y]!=finalpuzzle[x][y]compare功能的一部分;當執行第二個循環時,用戶選擇的選項不會保留在currentprogress 2D陣列中,因此無論在currentprogress函數中的變量choice處記錄了多少次輸入,程序都不會繼續。

如何將2D陣列的狀態從第一個循環傳遞到第二個循環等等?

謝謝!

+2

我沒有按照鏈接,但:無論你可能聽說過 - 恕我直言,最好忘記它。請閱讀[如何創建最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)。如果您無法通過適合問題文本的小例子重現您的問題,那麼這是您問題的錯誤平臺。 – Scheff

+0

您正在將'stat'按值傳遞給'compare',所以函數會修改該變量的一個副本。將簽名更改爲傳遞指針或僅返回該值:'stat = compare(temp,store);'。我沒有閱讀你的其他代碼,它太長了。 –

+0

@Scheff,對不起,麻煩。 – Raph

回答

0

在您的main()我注意到有關鍵詞do但從來沒有while,它可以防止你屈曲。

然後,爲了能夠恢復值state,有兩種解決方案。第一個是返回您state變量的值,

char compare(char currentprogress[NROW][NCOL], char finalpuzzle[NROW][NCOL], char status) { 
    // Your code 
    return (status); 
} 

,第二個是通過指針參數訪問相同的存儲器區域作爲您的「主」的變量中。

void compare(char currentprogress[NROW][NCOL], char finalpuzzle[NROW][NCOL], char *status){ 
    *status = 'f'; // now your state variable has the same value in your main() 
} 

爲了理解這個機制,我建議你重新定位範圍,並通過複製發送參數。換句話說,compare中的變量state與您的main中的變量具有相同的值,但不一樣,它是副本。