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

标签 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

$

最佳答案

我认为 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';
    }
}

关于c - fgets() 从键盘读取新行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42079925/

相关文章:

c - Makefile:多个目标,一个依赖

c - 获取字符串 c 中的字符串

java - 开销与代码速度(java.io.File 数组与 java.lang.String 数组)

java - 正则表达式模式验证重复字符的计数

c++ - 从字符串流复制到 char * 数组返回作为函数参数

c++ - 如何查找包含零作为元素的字符数组的长度

c++ - 构建调试输出字符串

mysql - 如何将一个c程序连接到mysql

c++ - 获取所有已使用来源的列表

string - 在 Fortran 中按名称获取文件单元,反之亦然