2017-06-05 64 views
0

我目前正在學習C語言,並且我剛剛寫了一個程序草案,允許用戶圍繞基於角色的迷宮/路徑移動玩家。我將迷宮/路徑構建爲多維字符數組,並通過替換數組中的某些字符來控制玩家的位置。這裏是多維數組我已經初始化:C多維數組:我錯過了什麼?

char maze[5][7] = { 
    {"_", "_", "_", "_", "_"}, 
    {"|", " ", " ", " ", "|"}, 
    {"|", " ", "|", " ", "|"}, 
    {"|", " ", "|", "_", "|"}, 
    {"|", "_", " ", " ", "|"}, 
    {"|", " ", "|", " ", "|"}, 
    {"|", "_", "_", "_", "|"} 
}; 

然而,當我嘗試編譯,我得到這個錯誤:

error: '}' expected 

數組中的第一行顯然是缺少某種閉架的,儘管我多次檢查了正確的數組語法,並且這看起來是正確的。我錯過了什麼?還有其他問題嗎?

+1

「|」是一個字符串文本,它具有字符數組的類型。是一個char類型的字符文字,你需要使用字符文字來初始化你的數組而不是字符串文字,並且數組應該被聲明爲char maze [7] [5],它有7個「rows」,5「列「 –

+1

首先,你得到的尺寸是錯誤的,然後你有一個*字符數組*數組*陣列,而不是字符串。最後,C沒有」多維數組「,它只有陣列數組。 ..) –

+1

C數組是** row major **所以你的初始化方法的大小和類型都是錯誤的 – StoryTeller

回答

0

您給數組的錯誤維數maze[5][7]它是行和列,您的定義是7行和5列。並且您將每個元素都輸入爲一個字符串。它應該是這樣的單引號內的字符,如'a'。如果你用雙引號定義它將變成字符串。這將解決您的問題

char maze[7][5] = { 
{'_', '_', '_', '_', '_'}, 
{'|', ' ', ' ', ' ', '|'}, 
{'|', ' ', '|', ' ', '|'}, 
{'|', ' ', '|', '_', '|'}, 
{'|', '_', ' ', ' ', '|'}, 
{'|', ' ', '|', ' ', '|'}, 
{'|', '_', '_', '_', '|'} 
}; 

希望這有助於:)

+0

更好的答案是解釋他爲什麼要這樣做,爲什麼他的代碼 – tilz0R

+0

我覺得評論已經這麼做了 –

+1

@VishwajeetVishu一個很好的答案是自成一體的,但你當然可以參考現有的評論。 –

2

你的陣列是char型的,但你的條目是char *類型。將雙引號"替換爲單引號'

單引號表示char本身,其中雙引號表示字符序列(字符串),因此編譯器會嘗試將\0字符添加到結尾。

另一方面,您必須交換值5和7以進行初始化。

最終的結果是與此類似:。

//7 big entries with 5 values 
char maze[7][5] = { 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
    {'_', '_', '_', '_', '_'}, 
}; 
0

您需要更換「」因爲一個字符是一個單點登錄 第二個問題是,您指定的長度錯誤

將第一個替換爲第二個長度

char maze[7][5] = { 
    {'_', '_', '_', '_', '_'}, 
    {'|', ' ', ' ', ' ', '|'}, 
    {'|', ' ', '|', ' ', '|'}, 
    {'|', ' ', '|', '_', '|'}, 
    {'|', '_', ' ', ' ', '|'}, 
    {'|', ' ', '|', ' ', '|'}, 
    {'|', '_', '_', '_', '|'} 
};