2013-05-10 296 views
2

我是新手,我試圖在屏幕上打印哪個鍵盤的按鍵被按下。我有程序到打印被按下的鍵的行號和列號的階段。我在想如果我可以聲明一個包含全部16個關鍵字符的字符串數組,那麼行號和列號就可以索引這個數組。這是我的微弱嘗試。聲明一串字符串並選擇單個字符

char key[4]; 
strcpy(key[0], "CD.Z"); 
strcpy(key[1], "89AB"); 
strcpy(key[2], "4567"); 
strcpy(key[3], "0123"); 

...

printf("The key pressed was %c", key[colnum][rownum]); 
+1

'炭鍵[4];'--->'字符鍵[4] [5];' – BLUEPIXY 2013-05-10 11:01:44

+5

或'字符*鍵[4] = { 「CD.Z」,「89AB」,「4567」,「0123」};' – BLUEPIXY 2013-05-10 11:03:53

+0

@BLUEPIXY這是錯誤的。謝謝您的幫助。 – Marmstrong 2013-05-10 11:04:58

回答

4

正如在評論中指出@BLUEPIXY,你的類型是錯誤的。

此外,還有在使用運行時間strcpy()各地複製的字符沒有意義的,你可以只使用編譯時初始化設置一個字符串數組:

const char *keys[] = { "CD.Z", "89AB", "4567", "0123" }; 

上述聲明keys是一個數組char *,這是C的「字符串類型」(它實際上只意味着「指向字符的指針」,但它通常用於字符串)。沒有爲該數組指定長度,編譯器會根據=右側的初始化表達式自動計算該長度。

因此,索引是這樣的:

printf("keys[2] is '%s'\n", keys[2]); 

將讓你的第三個元素(從0℃指標陣列)。

由於指針可以被索引,以及,你也可以這樣做:

printf("second char of '%s' is '%c'\n", keys[2], keys[2][1]); 

這裏,keys[2][1]手段「首先從keys陣列取得第三個元素,然後得到這個數組的第二個元素」。這將字符指針視爲一個數組(通過使用[]索引操作符),但在C中沒問題,所有指針都可以像這樣處理。

2

這段代碼不應該編譯。 您試圖將char數組複製到char。 編譯器應該發出錯誤

將其修改爲此版本。

char key[4][5]; 
strcpy(key[0], "CD.Z"); 
strcpy(key[1], "89AB"); 
strcpy(key[2], "4567"); 
strcpy(key[3], "0123"); 
0

按下鍵就可以顯示的行和列數

c = getchar(); 
for(i=0;i<4;i++) 
{ 
    for(j=0;j<4;j++) 
    { 
     if(keys[i][j]==c) 
     { 
      printf("Key of Row %d and Column %d was pressed",i+1,j+1); 
     } 
    } 
} 

這可能會幫助你後,你的定義字符數組一樣

char *keys[] = { "CD.Z", "89AB", "4567", "0123" }; 

0
key[0] 

意味着它只能容納一個字符,而您持有四個字符。對於這一點,需要聲明像以下:

char key[4][5]= {"CD.Z", "89AB", "4567", "0123"};