我在C编程。出于某种原因,只是跳过我的fgets,然后运行代码,我不知道为什么。跳过我的fgets
char content[256];
printf("What do you want it to say?\n");
fgets(content, 256, stdin);
我在C编程。出于某种原因,只是跳过我的fgets,然后运行代码,我不知道为什么。跳过我的fgets
char content[256];
printf("What do you want it to say?\n");
fgets(content, 256, stdin);
您是否尝试过冲洗stdin?你可能会在其中捕获一个换行符,导致你的fgets立即返回。
This question引用刷新标准输入
我对C非常陌生;我刚开始的一天。所以没有任何意义... – 2012-07-13 19:44:27
你能解释给我,就像我是一个15岁,这是他的第一个低级语言 – 2012-07-13 19:44:56
请注意,'fflush(stdin)'有未定义的行为(作为答案链接的问题解释)。 – 2012-07-13 20:22:40
回想一下,I/O可缓冲的好方法。如果在调用函数时输入缓冲区中有任何内容等待读入,则缓冲区中的第一个字符为'\n'
,该函数将立即返回并显示不收集任何输入。在调用fgets()
之前,请确保输入缓冲区中没有任何内容。
你在说什么是有道理的,但我该怎么做? – 2012-07-13 19:47:39
只要清除输入缓冲区,[C FAQs](http://c-faq.com/stdio/stdinflush2.html)中有示例代码可能有用。当您在输入缓冲区中遇到散落字符的问题时,通常暗示在* this之前出现的I/O代码有问题。 – bta 2012-07-13 19:47:57
我使用了示例代码,它工作。但由于某种原因,当它将字符串追加到文件时,它会在它之前添加两个输入。任何想法为什么? – 2012-07-13 20:02:02
char content[256];
printf("What do you want it to say?\n");
while (getchar() != '\n');
fgets(content, 256, stdin);
还是你试试这个...
char content[256];
printf("What do you want it to say?\n");
fgets(content, 256, stdin);
的问题是在代码此代码之前。 – 2012-07-13 19:42:25
大概告诉你不要使用它;) – Mehrdad 2012-07-13 19:42:54