当格式化输入字符时 如:
scanf("%c",&k); 要特别注意将回车输入的情况;
例
while(1)
{
i++;
scanf("%c",&k);
printf("k = %c\n",k);
printf("i = %d\n",i);
}
运行结果:
输入:1
输出:k = 1
i = 1
k =
i = 2
显然,格式化输入将回车输入到了变量中;
解决办法:
把例子改成如下
while(1)
{
i++;
scanf("%c%c",&k,&m);//用m来接收回车
printf("k = %c\n",k);
printf("i = %d\n",i);
}
或
while(1)
{
i++;
scanf(" %c",&k);//%c前有空格
printf("k = %c\n",k);
printf("i = %d\n",i);
}
输入:1
输出:k = 1
i = 1
输入:2
输出:k = 2
i = 2
结果正常了;
原因:键盘缓冲区残余信息。我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了下一个循环的k;
还可以在下一此输入前加fflush(); 清除一个流
2 scanf 返回值为成功输入了几个参数;