c语言问题解疑

来源:百度知道 编辑:UC知道 时间:2024/05/27 18:10:28
今天无聊编写了个小程序突然发现一个问题
//Test.c
#include<stdio.h>
main()
{
char c;
int a;
printf("please input a number:");
scanf("%d",&a);
printf("please input a operator:");
scanf("%c",&c);
printf("%c\n",c);
}
运行的结果见附图
可是只要在scanf("%c",&c);前加上getchar();
就可以正常运行,请各位说说详细的原理

每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了,而\n被下一个scanf()函数“错误”地赋给了c.解决办法:可以在第一个scanf()函数之后加getch() , getchar()也可以

或者第二个scanf改为 scanf(" %c",&c); (注意,%前多加了个空格)

scanf("%c",&c);/*意图通过这个命令让程序暂停运行,等到键入任意一个值时继续运行*/
scanf()函数是从键盘缓冲区取数据,而不是直白的理解为我按一个键它才取走,因为你按下的键都被存入缓冲区,也就是说。你的这个函数没有起作用是因为你的键盘缓冲区还有字符,于是scanf()就不等你按下键,直接从缓冲区取走了。
记住scanf()不是直接和你打交道,你和scanf()之间还有个键盘缓冲区这样的中间代理人。