fgets()从键盘读取新行字符

时间:2017-02-07 00:56:02

标签: c string char newline fgets

我想知道fgets()是否从用户输入(即键盘)读取新的行字符。这是我写的一些示例代码:

while (1) {
  char userInput[3] = {'\0', '\0', '\0'};

  fgets(userInput, 3, stdin);
  flushStdin();
  printf("%s\n", userInput);
}

如果我输入'2',我会重新输入另一个字符,结果如下:

$ 2
$ 3
  2

$

我理解fgets()是如何工作的,所以可能是我的逻辑不正确。所需的输出是:

$ 2
  2

$

1 个答案:

答案 0 :(得分:0)

我认为fgets()读取的最小值比给定的缓冲区大小少1。当你按Enter键时,它将从输入中获取\ n。您可以使用类似的东西来清理字符串的输入或使用scanf()进行int输入

void readLine(char* buffer, int bufferLength, FILE* file)
{
    fgets(buffer, bufferLength, file);

    int len = strlen(buffer);
    if(len > 0 && buffer[len - 1] == '\n'){
        buffer[len - 1] = '\0';
    }
}