scanf的一个问题(暂未解决)
2013-08-09 16:12 清心朗静 阅读(274) 评论(0) 编辑 收藏 举报如下代码,没有按照预想的那样运行:
int a; char b; printf("input a integer\n"); scanf("%d", &a); printf("input a char\n"); //scanf("%1s",&b); scanf("%c",&b); printf("%d,%c\n",a,b );
运行的结果如下,并没有机会输入char字符,输入int后,回车直接就显示了。
----------------------------------------------------------------------------
原因分析:
输入int数值后,回车,此时连同回车一起进入了缓冲区,而b获取字符变成了回车符。
解决方案:
重点是要忽略到回车。
(1)用函数fflush(stdin)清除全部剩余内容 ==>OK
(2)用"%1s"来限制 ==>OK
(3)用getchar()清除
(4)用格式串中空格或"%*c"来"吃掉"
方法一:
int a; char b; printf("input a integer\n"); scanf("%d", &a); printf("input a char\n"); fflush(stdin); scanf("%c",&b); printf("%d,%c\n",a,b );
方法二:
%1s 读长度为1的字符串,因此前面的空格,回车都会过滤掉。
int a; char b; printf("input a integer\n"); scanf("%d", &a); printf("input a char\n"); scanf("%1s",&b); printf("%d,%c\n",a,b );
运行结果:
但程序结束报错:
修改如下即可:
将b定义为字符数组(字符串)
int a; char b[2]; printf("input a integer\n"); scanf("%d", &a); printf("input a char\n"); scanf("%1s",&b); printf("%d,%c\n",a,b[0]);
方法三、