C 在循环中使用FGET从终端读取数据
我试着用fgets从终端读取几行文本。问题是它只读取一行并停止。我尝试刷新缓冲区并使用getchar来吸收换行符,但仍然不起作用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
#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确实如此。我现在无法编辑评论。如果你留下你的评论,那就好了。谢谢