2010-10-26 77 views
2

我有这样的C语言代码的麻烦:二scanf函数不工作

char st[2]; 

printf("enter first value:"); 
scanf("%c", &st[0]); 

printf("enter second value:"); 
scanf("%c", &st[1]); 

所以我的电脑没问我要进入第二个值,我的意思是说,它仅打印第一printf语句,然后我输入一个字符,然后它只打印第二个printf声明和程序结束,而不需要第二个输入。

请帮忙。这段代码有什么问题?

- 预先感谢。

+1

可能的重复:http://stackoverflow.com/questions/1669821/scanf-skips-every-other-while-loop-in-c – Alam 2010-10-26 12:32:37

+0

它必须是'scanf'问题的一天。 [同样的问题,这个](http://stackoverflow.com/questions/4016073/scanf-fails-why),我想。 []() – 2010-10-26 12:33:52

回答

8

它的确如此。 ENTER键生成的字符已经存在于缓冲区中。

+0

+1我需要学习打字速度更快:D – nathan 2010-10-26 12:39:26

3

我认为你的问题是第二次scanf正在接收“Enter”键按下。

+0

+1,我的身后只有12秒钟:) – leppie 2010-10-26 12:36:06

3

您将得到您作为第二个字符输入的隐式换行符,即st[1]正在获取值'\n'。一个简单的方法来解决这个问题是包括预期的格式字符串换行符:scanf("%c\n", &st[0]);

2

变化

scanf("%c", &st[0]); 

这个

scanf(" %c", &st[0]); 

这是一个shotty答案(没有错误检查或任何东西)但其快速简单。

0

使用fflush(stdin);函数之前的第二个scanf();。它将冲洗第一次scanf();后生成的ENTER键。 实际上,你的第二个scanf()将ENTER作为它的输入,并且由于scanf在获得一个ENTER之后终止,所以它没有采取任何其他的事情。