【问题标题】:Reading input with fgets?用 fgets 读取输入?
【发布时间】:2014-04-07 09:29:08
【问题描述】:

我正在尝试使用 fgets() 获取一个字符的输入。据我所知,除非没有空间,否则 fgets 会将 \n 添加到输入的末尾。

char test[1];
fgets(test,1,stdin);
readRestOfLine();
while (strcmp(test,"z") != 0){
......
......
}

无论如何,即使输入 z,循环也不会运行。这是为什么呢?

【问题讨论】:

    标签: c fgets


    【解决方案1】:

    man fgets

    char *fgets(char *s, int size, FILE *stream);

    fgets()stream 中读取最多小于 size 个字符,并且 将它们存储到 s 指向的缓冲区中... 终止空字节('\0')存储在最后一个字符之后 缓冲区。

    在您的 size 1 的情况下,这意味着 fgets() 读取为零,即。 e.不,字符并将终止的 '\0' 存储在 test[0] 中。

    【讨论】:

      【解决方案2】:

      strcmp 从其名称对字符串进行如下操作,因此test 必须是\0 终止的字符串。 test 必须为\0 留出空间。

      【讨论】:

        【解决方案3】:

        正如你所说的,fgets 在字符串末尾附加了一个“\n”。所以如果你只输入“z”,那么结果字符串将是“z\n”,它不等于“z”。

        此外,fgets 的缓冲区大小仅适用于程序中的字符长度,但此长度必须至少与您打算输入的最长字符串一样长。

        试试这个:

        char test[100];   // space for 98 characters + \n + terminating zéro
        fgets(test, 100, stdin);
        readRestOfLine();
        while (strcmp(test,"z\n") != 0){
           ......
           ......
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-05-09
          • 1970-01-01
          • 2015-08-19
          • 1970-01-01
          • 2022-11-10
          • 2015-02-04
          • 1970-01-01
          相关资源
          最近更新 更多