如何摆脱第二次按下输入与获取C?

时间:2014-12-24 03:29:25

标签: c fgets

我有一些简单的代码,我遇到了以下问题 - 当我第二次调用函数playerGuess()时,它不允许我输入任何内容。看起来程序按下会自动进入。这是为什么?你能帮忙吗?

 int main(void)
 {


 void playerGuess();
 void playerGuess();
 }

 void playerGuess()
{
  char playerInput[2];
  int num, row, colum;
  printf("Enter a grid reference (a1 - j0): ");
  fgets(playerInput, 3, stdin);
  printf("%s", playerinput);
}

2 个答案:

答案 0 :(得分:5)

playerInput太短了。您需要输入空间,加上换行符和nul。你的第一个fgets()在行结束前停止,因为它超出了缓冲区空间(尽管你仍然超出了缓冲区,因为你指定的大小比实际数组大)...然后是第二个{ {1}}读取行的其余部分(具有换行符)。

答案 1 :(得分:1)

如果fgets的结果没有以换行结束,则表示您尚未读取所有数据。 您现在需要决定如何处理未读数据。一个选项是调用getchar,直到看到换行符(或EOF)

// discard he rest of the line:

if(! strchr( playerinput,'\n')
{
  int c;
  do 
  {
    c=getchar(stdin);
  }
  while ( c != EOF && c != '\n');
}