第二个scanf无法工作

8
我遇到了这个C语言代码的问题:
 char st[2];

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

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

所以我的电脑没有要求我输入第二个值,我是想说它只打印了第一个printf语句,然后我输入了一个字符,然后它只打印了第二个printf语句,并且程序在没有获取第二个输入的情况下结束了。
请帮忙看看这段代码有什么问题吗?
-提前感谢。

1
可能重复:https://dev59.com/IXI-5IYBdhLWcg3wy70d - Alam
今天好像是scanf问题的日子。我认为这与这个问题相同。 - The Archetypal Paul
5个回答

10

好的,没问题。ENTER键产生的字符已经存在于缓冲区中。


8

在第二个scanf();之前使用fflush(stdin);函数。它将清除第一个scanf()后生成的ENTER键。 实际上,你的第二个scanf()正在把ENTER键作为输入,并且由于scanf()在获取ENTER键后终止,它不会接受你提供的任何其他内容。


4
我认为您的问题在于第二个scanf接收了“Enter”键。

4

您输入的第二个字符是隐式换行符,即st[1]获得了值'\n'。一个简单的解决方法是在预期的格式字符串中包含换行符:scanf("%c\n", &st[0]);


3

更改

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

转换为:

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

这是一个简单粗糙的答案(没有错误检查或其他任何功能),但它快速而容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接