我将显示器和键盘连接到Raspberry Pi,当我按下一个键时,它会在屏幕上显示该键。我正在使用this库和this程序的一部分。
所以我理解这段代码将密钥传递给我的keyboardKey
函数。
if (reply->object == GENIE_OBJ_KEYBOARD)
{
if (reply->index == 0) // Only one keyboard
keyboardKey (reply->data) ;
然后keyboardKey
函数会在屏幕上显示该键并将值保存到buf
数组中。
void keyboardKey (int key)
{
char buf[4] ;
int i ;
printf("you typed %c\n",key) ; //shows the typed key in the terminal
sprintf(buf, "%c",key); //transforms the key into a string which is required for using genieWrite
genieWriteStr (1, buf) ; //writes the string to the screen. 1 is the index of the text box
buf[i] = key ; //stores the key in the array
printf("%c\n",buf[0]); //prints the array [0] in the terminal
}
问题是它只显示一个输入。每次按下某个键时,它都会被覆盖,文本框只显示最后一个输入。但我想要的是例如显示一个名字。
因此,我必须将传递给函数的每个键存储到数组中,而不会覆盖任何先前的键。
我知道如何使用scanf
或getchar
来存储和打印来自终端的用户输入,并使用for loops
来存储和打印输出,但是在这里我被卡住了。我在考虑最后使用i++
,但首先应该i
得到什么价值?
任何想法或术语我可以google,我很确定这是一个常见的问题?
答案 0 :(得分:1)
不太确定你想要完成什么。无论如何,如果你想在keyboardKey
的每次调用中存储你的缓冲区状态,你可以将其声明为静态,如下所示:
#define BUF_SIZE 4
void keyboardKey(int key) {
static char buf[BUF_SIZE];
static int i = 0;
if(i > ((int)sizeof(buf) - 2)) {
i = 0;
memset(buf, 0, sizeof(buf));
}
printf("you typed %c\n",key);
buf[i] = key;
genieWriteStr (1, buf);
buf[i++] = key;
printf("%s\n",buf);
}