如何在c中没有for循环的数组中存储用户输入

时间:2015-10-31 16:41:51

标签: c arrays for-loop

我将显示器和键盘连接到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
}

问题是它只显示一个输入。每次按下某个键时,它都会被覆盖,文本框只显示最后一个输入。但我想要的是例如显示一个名字。

因此,我必须将传递给函数的每个键存储到数组中,而不会覆盖任何先前的键。

我知道如何使用scanfgetchar来存储和打印来自终端的用户输入,并使用for loops来存储和打印输出,但是在这里我被卡住了。我在考虑最后使用i++,但首先应该i得到什么价值?

任何想法或术语我可以google,我很确定这是一个常见的问题?

1 个答案:

答案 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);
}

LIVE DEMO