【问题标题】:Using fgets in a loop to read from terminal在循环中使用 fgets 从终端读取
【发布时间】:2016-12-20 10:58:32
【问题描述】:

我正在尝试使用 fget 从终端读取几行文本。问题是它只读取一行并停止。我尝试刷新缓冲区并使用 getchar 吸收换行符,但它仍然不起作用。

#include <stdio.h>

int main()
{
        int count = 2;
        int len = 5;
        char str[count][len];

        for(int i = 0; i < count; i++)
        {
                fgets(str[i], len, stdin);
                fflush(stdin);
        }
}

【问题讨论】:

  • 你是怎么检查的?尝试增加len 的值。
  • fflush(stdin); 未定义
  • 你给它什么输入?

标签: c for-loop stdin fgets


【解决方案1】:

fflush(stdin);undefined behaviour。不要使用它。

我认为,您的问题是您输入了更多的len 字符,因此对fgets() 的第二次调用读取了第一次调用留下的字符。 只需充分增加len

您还应该检查fgets() 的返回值是否失败。

【讨论】:

  • 没错,我没有考虑空字符和字符串末尾的新行。不存储它们的方法是什么,以便我以后可以在没有这些字符的情况下使用数组?
  • 如果你想将它用作 C 字符串,你需要空字节。至于换行,可以不用strcspn[str[i], "\n"] = 0;
  • 您的“strcspn()”建议需要一些润色。 str[i][strcspn(str[i], "\n")] = '\0'; 是你的意思,我想。
  • @JonathanLeffler 确实如此。我现在无法编辑评论。如果你留下你的评论,那就太好了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多