C - While-Loop复制打印语句

时间:2016-04-23 16:38:37

标签: c while-loop stdin fgets

当while循环第一次运行后,它会打印我的"创建新节点"在从stdin获取用户输入之前提示两次。为什么是这样?见链接图片。

代码:

int main()
{
  char userInput[2];
  while(1)
  {
    printf("\nCreate new node? (y/n)\n");
    printf(">>> ");
    fgets(userInput, 2, stdin);

    if(strcmp(userInput, "y") == 0)
    {
        printf("Yes\n");
    }

    else if(strcmp(userInput, "n") == 0)
    {
        printf("No\n");
        exit(0);
    }
  }
}

终端输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

fgets读取字符串加'\0''\n'。由于userInput仅为2字节,'\n'将不会被fgets读取,并且将在输入缓冲区中。在下一次迭代fgets将会读取前一次'\n'调用留下的fgets

增加缓冲区大小,您将没有问题

char userInput[3];  

或者你可以把

int ch;
while((ch = getchar()) != '\n' && ch != EOF);

fgets陈述之后。