2013-05-10 123 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"};