我是c编程的新手,我正试图在屏幕上打印键盘的哪个键被按下。我有程序到舞台,它打印按下的键的行号和列号。我在想是否可以声明一个包含所有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]);
答案 0 :(得分:4)
正如@BLUEPIXY在评论中指出的那样,你的类型是错误的。
此外,使用运行时strcpy()
复制字符没有意义,您可以使用编译时初始值设置器来设置字符串数组:
const char *keys[] = { "CD.Z", "89AB", "4567", "0123" };
上面将keys
声明为char *
的数组,这是C的“字符串类型”(它实际上只表示“指向字符的指针”,但它通常用于字符串)。没有为数组指定长度,编译器会根据=
右侧的初始化表达式自动计算它。
所以,索引如下:
printf("keys[2] is '%s'\n", keys[2]);
将为您提供第3个元素(C索引来自0的数组)。
由于指针也可以编入索引,你也可以这样做:
printf("second char of '%s' is '%c'\n", keys[2], keys[2][1]);
这里,keys[2][1]
表示“首先从keys
数组中获取第3个元素,然后从该数组中获取第2个元素”。这将字符指针视为一个数组(通过使用[]
索引操作符),但在C中没问题,所有指针都可以被视为这样的数组。
答案 1 :(得分:2)
此代码片段不应编译。 您试图将char数组复制到char。 编译器应该发出错误
将其修改为此版本。
char key[4][5];
strcpy(key[0], "CD.Z");
strcpy(key[1], "89AB");
strcpy(key[2], "4567");
strcpy(key[3], "0123");
答案 2 :(得分:0)
定义你的角色数组,如
char *keys[] = { "CD.Z", "89AB", "4567", "0123" };
按键后,您可以将行号和列号显示为
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);
}
}
}
这可能对你有帮助。
答案 3 :(得分:0)
key[0]
意味着它只能容纳一个字符,而您只能容纳四个字符。为此,您需要声明如下:
char key[4][5]= {"CD.Z", "89AB", "4567", "0123"};