getchar()每次只取一个字符,你输入20是输入了两个字符:'2'和'0',而你正好调用了两个getchar(),所以c1='2',a='0',而你打印的时候c1是按%c打印的,所以你输入的是什么就打印什么,而a是按%d打印的,它会打印 字符'0'在计算机里的大小,也就是ascii值48。
getchar()的机制:用户调用getchar()的时候,getchar()会调用一个系统调用向内核请求,这段时间用户程序会挂起,而内核会监控输入设备,一旦输入设备有输入了(你敲一个字符),内核就会把输入的字符传给用户程序(getchar()函数返回)。
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
%c 和%d 的区别你知道吗?
getchar函数的使用方法你知道吗?
就是接受一个键盘输入,输入了就结束了,没有按enter也算
所以你输入2的时候c1是2
输入0的时候是a=0
getchar是接受的是字符
所以输出的时候c1=2,‘0’的ASCII是48,
已经说的比较详细了
==========
希望采纳,不懂继续追问
c1=getchar();
a=getchar();
c1存的字符是'2'
a存的字符是'0'
%c是以字符型式输出,当然是输出2了
%d是以整数型式输出'0'对应的整数是48所以输出48了
每一个字符都有他对应的整数的,正所谓一切皆是数,计算机里面的东西都是数的
#include
void main()
{
char c1;
int a;
c1=getchar(); //接收的是字符'2'
a=getchar(); //接收的是字符'0‘
printf("c1=%c,a=%d",c1,a);
}
getchar();一次只能接收一个字符,输出时c1输出字符'2‘,a输出0的ASC码48;