更深度了解getchar和putchar现象

简介: 更深度了解getchar和putchar现象

前言:


 经过学习,总结getchar()函数和putchar()函数在搭配使用while循环的时候,控制台窗口光标位置的出现位置的由来。


1.getchar和putchar

 大家也都清楚getchar和putchar的作用了,我通过一些简单的代码来解释,以及通过一些特殊例子来说明一些情况。


1.1基本使用

这是使用的基本情况,我们知道getchar返回的是字符的ASCII,看下面的代码:

  这里我们想探讨的是什么呢?可能身为读者的不知道博主想表达什么,这里想说的是,首先,getchar读取失败的时候,会返回一个EOF这个知识点,ctrl+z就是让getchar读取失败;第二就是使用int来创建变量ch来接收字符,为什么?我们知道用ASCII码表来表示字符的时候,只有0-127有表示字符,ASCII码值-1对应的字符未定义,这样的时候,当我们getchar读取失败,又用char类型创建变量,打印的时候我们格式会用%c来打印字符,此时就会像上面代码一样,输出一个正方形的错误,而我们用int类型创建变量,我们肯定是下意识用%d来打印的,那-1就原封不动打印出来,而且getchar返回值是int。这里就是想告诉读者,在%c打印字符的时候,出现了奇怪的现象,会不会是超出范围了。


1.2一些特殊打印

 看完特殊打印后,最后一部分就可以更深了解getchar的等的效果啦。空杯心态哦~



 我们看到这里,scanf函数遗留下来的空字符,直接被getchar读取放到ch变量里,ch变量不等于字符'Y',所以在确认Y/否认N后面直接跟着放弃确认。


 最后我们还使用putchar打印了ch,ch是空字符,打印出来和换行效果一致。


函数功能

getchar()

putchar()

读取输入缓冲区的一个字符

显示要打印的一个字符

1.3putchar打印空格


 因为我们鼠标可以在控制台上任意滑动,就会有这个白白的选中区,putchar打印的空格选中也一样,所以基本一样。


2.深度了解现象

 希望读者可以自己再编译器上敲上这么一些代码自己感受一下,虽然我截图的时候,有吧光标的位置给截着出来,但还是需要去体会一番。



 为什么在我们输入一个字符a后会,打印出来会跳到第三行!


 有没有想过这个问题,我们知道,在输入的时候,我们输入a回车,就会来到第二行,然后就是打印a,循环结束,回到判断部分,继续读取,大家可以抢答了,读取到了什么?


 对的,恭喜你答对了,读取到了'\n'放到了ch里,'\0'等于EOF吗?显然不等,'\0'的ASCII码值是0,EOF是-1。好的,putchar(ch),ch是空字符,大声告诉我,光标调到第三行是不是因为再一次putchar了!是的,由于计算机太快了,我们看不到这细微的变化。那有人说了,博主你怎么知道的,嘿嘿,请看下面的内容。



 这里怎么理解while里的if条件呢?判断式表达的意思是,如果你输入的字符ASCII码值小于'0'(48)或者大于'9'(57),那么你就执行continue,重新回到判断,没有打印。也就是说,只有输入字符0-9之间的数字,才能有putchar。


 这里光标不在第三行,而在紧贴在打印的内容后面。因为你看,当我们输入1回车,右边的窗口来到第二行,ch接收到了1,不等于EOF,进到循环里面,不符合if条件,没有执行continue,putchar打印出1,好的,一个循环结束;重新来到判断,getchar没有停留,因为读取到了上次留下的'\n',不等于EOF,也进入到循环,但符合条件,continue执行,ch里是空字符,但没法putchar;重新回到判断,这次有停留了,因为输入缓冲区里啥也没有,不像上面那段代码,这里的条件,使得ch为空字符的时候putchar不了,所以就在第二行的后面显示光标要我们输入。


 读到这里,希望你有所收获,大家也可以去看看《令博主奔溃的scanf函数-C》,也挺有意思的内容。如果文章有内容上,排版上有问题,可以评论区下方说哦~


 求点赞,求点赞,求点赞!你的点赞是我更新的动力!

相关文章
|
7月前
|
算法 Java C语言
算法编程(一):实现 strStr()
算法编程(一):实现 strStr()
64 0
|
7月前
|
存储 编译器 C语言
函数解剖——深挖getchar()与putchar()
函数解剖——深挖getchar()与putchar()
|
7月前
|
Windows
函数解剖——深挖printf()与scanf()
函数解剖——深挖printf()与scanf()
函数解剖——深挖printf()与scanf()
|
6月前
|
C语言
用getchar和putchar读/写字符
用getchar和putchar读/写字符
66 0
|
7月前
|
存储 编译器 C语言
C语言程序设计——字符输入函数getchar()
C语言程序设计——字符输入函数getchar()
|
7月前
|
存储 编译器 C语言
C语言程序设计——字符输出函数putchar()
C语言程序设计——字符输出函数putchar()
|
7月前
strcat与strncat函数使用与模拟实现
strcat与strncat函数使用与模拟实现
45 0
strstr函数的使用及模拟实现
1.strstr函数 2.strstr函数的使用 3.strstr函数的模拟实现
176 0
三种方法模拟实现库函数strlen,加深对strlen的理解
三种方法模拟实现库函数strlen,加深对strlen的理解