2012-07-13 50 views
0

我在C编程。出于某种原因,只是跳过我的fgets,然后运行代码,我不知道为什么。跳过我的fgets

char content[256]; 
printf("What do you want it to say?\n"); 
fgets(content, 256, stdin); 
+5

的问题是在代码此代码之前。 – 2012-07-13 19:42:25

+0

大概告诉你不要使用它;) – Mehrdad 2012-07-13 19:42:54

回答

1

您是否尝试过冲洗stdin?你可能会在其中捕获一个换行符,导致你的fgets立即返回。

This question引用刷新标准输入

+0

我对C非常陌生;我刚开始的一天。所以没有任何意义... – 2012-07-13 19:44:27

+0

你能解释给我,就像我是一个15岁,这是他的第一个低级语言 – 2012-07-13 19:44:56

+0

请注意,'fflush(stdin)'有未定义的行为(作为答案链接的问题解释)。 – 2012-07-13 20:22:40

1

回想一下,I/O可缓冲的好方法。如果在调用函数时输入缓冲区中有任何内容等待读入,则缓冲区中的第一个字符为'\n',该函数将立即返回并显示不收集任何输入。在调用fgets()之前,请确保输入缓冲区中没有任何内容。

+0

你在说什么是有道理的,但我该怎么做? – 2012-07-13 19:47:39

+0

只要清除输入缓冲区,[C FAQs](http://c-faq.com/stdio/stdinflush2.html)中有示例代码可能有用。当您在输入缓冲区中遇到散落字符的问题时,通常暗示在* this之前出现的I/O代码有问题。 – bta 2012-07-13 19:47:57

+0

我使用了示例代码,它工作。但由于某种原因,当它将字符串追加到文件时,它会在它之前添加两个输入。任何想法为什么? – 2012-07-13 20:02:02

0
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);