C语言易错知识点集合之getchar()
因为病毒太厉害了,电脑没带回家只能用手机写一篇不能用代码展示,望理解。
getchar()
函数原型:int getchar(void)//必须包含stdio.h头文件
返回类型:int整型
返回值:用户输入的ASCⅡ码,出错返回-1
char x;
x=getchar();
printf(“x=%c”,x);
-
打开控制台当在键盘上按下1回车后,x=1此时的1是一个字符char只占一个字节,不是整形int占四个字节。我们最后加上printf(“i=%d”,x)得到i=49(1的ASCII码=49),这里可以看出当两个数比较大小时应当注意两个数必须为同一类型。
-
不仅仅这样getchar还有个问题,就是大家所关注的缓冲区问题,提到缓冲区不得不提下stdin流。还是上面的例子我们在最后加上g=getchar();printf(“g=%c”,g);按下1空格2回车再按回车最后结果x=1,g= ‘ ’(代替空格),是不是不符合我们想要的呢?因为当我们按下后,从键盘到缓冲区中的字符依次是1‘ ’2‘ ’,不要忘记空格也是一个字符,我们可以最后再加上printf(“i=%d”,g)得到i=32(空格ASCII码=32)所以要想x=1,g=2按下12空格,不过这样程序运行完后缓冲区任然有个’\n’回车符,不过在程序运行完毕从新运行时缓冲区会刷新的,但是有没有消除这个回车呢?
-
①在进行单个字符赋值时只需要在每输入的字符后加上getchar(),这里的getchar并没有对任何变量进行赋值,只是从缓冲区中把’\n’取出来了。
-
②在字符串赋值时最常用while((c=getchar())!=’\n’) //每个getchar()依次读入一个字符 。意思就是说,直到遇到回车符才结束循环,而getchar()函数就是等待输入(或缓冲区中的数据)直到按回车才结束,所以实现了整个字符串的输出。
总结:以图的形式让大家更加直观的理解。