2

我是 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]);
4

4 回答 4

4

正如@BLUEPIXY在评论中指出的那样,您的类型是错误的。

此外,使用运行时复制字符没有意义strcpy(),您可以使用编译时初始化程序来设置字符串数组:

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

上面声明keys的是一个数组char *,它是C的“字符串类型”(实际上只是“指向字符的指针”,但它通常用于字符串)。没有为数组指定长度,编译器会根据 . 右侧的初始化表达式自动计算它=

所以,索引是这样的:

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

将为您提供第三个元素(C 索引数组从 0 开始)。

由于指针也可以被索引,你也可以这样做:

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

这里的keys[2][1]意思是“首先从数组中获取第三个元素keys,然后从该数组中获取第二个元素”。这将字符指针视为一个数组(通过使用[]索引运算符),但在 C 中这很好,所有指针都可以被视为这样的数组。

于 2013-05-10T11:09:53.070 回答
2

此代码片段不应编译。您试图将 char 数组复制到 char。编译器应该发出一个错误

修改为这个版本。

char key[4][5];
strcpy(key[0], "CD.Z");
strcpy(key[1], "89AB");
strcpy(key[2], "4567");
strcpy(key[3], "0123");
于 2013-05-10T11:02:34.543 回答
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);
      }
   }
}

这可能会帮助你。

于 2013-05-10T12:12:37.993 回答
0
key[0] 

意味着它只能容纳一个字符,而您持有四个字符。为此,您需要声明如下:

char key[4][5]= {"CD.Z", "89AB", "4567", "0123"};
于 2014-06-18T11:25:34.280 回答