C 在循环中使用FGET从终端读取数据

C 在循环中使用FGET从终端读取数据,c,for-loop,stdin,fgets,C,For Loop,Stdin,Fgets,我试着用fgets从终端读取几行文本。问题是它只读取一行并停止。我尝试刷新缓冲区并使用getchar来吸收换行符,但仍然不起作用 #include <stdio.h> int main() { int count = 2; int len = 5; char str[count][len]; for(int i = 0; i < count; i++) { fge

我试着用fgets从终端读取几行文本。问题是它只读取一行并停止。我尝试刷新缓冲区并使用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);
        }
}
#包括
int main()
{
整数计数=2;
int len=5;
字符str[count][len];
for(int i=0;i
fflush(标准输入法)是。不要用它

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


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

您是如何检查的?尝试增加
len
fflush(stdin)的值
是否未定义?您提供了哪些输入?没错,我没有说明空字符和字符串末尾的新行。有什么方法不存储它们,这样我以后就可以在数组末尾不使用这些字符了?如果要将空字节用作C字符串,则需要空字节。至于换行符,您可以不用使用
strcspn[str[i],“\n”]=0。你的“strcspn()`建议需要润色一下<代码>str[i][strcspn(str[i],“\n”)]='\0'就是你的意思,我想。@JonathanLeffler确实如此。我现在无法编辑评论。如果你留下你的评论,那就好了。谢谢