更深度了解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月前
|
编译器 C语言 C++
如何解决VS中scanf使用时报错或无法使用的问题
如何解决VS中scanf使用时报错或无法使用的问题
113 0
|
9月前
scanf和getchar区别
scanf和getchar区别
131 0
|
10月前
|
缓存
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!(下)
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!(下)
55 0
|
5月前
|
安全 C语言 C++
VS中使用scanf函数报错如何解决?
VS中使用scanf函数报错如何解决?
26 0
|
9月前
|
数据安全/隐私保护 C语言
【C语言】getchar和putchar函数详解:字符输入输出的利器
【C语言】getchar和putchar函数详解:字符输入输出的利器
271 0
|
10月前
|
存储 缓存 vr&ar
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!(上)
scanf和getchar大家都用过吧!那么缓存区的概念你必须了解!
55 0
|
10月前
|
安全 数据安全/隐私保护 C语言
【C语言】scanf getchar gets函数详解,带你摆脱窘境
【C语言】scanf getchar gets函数详解,带你摆脱窘境
81 0
|
11月前
|
人工智能
scanf函数与getchar函数区别
scanf函数与getchar函数区别
114 0
|
11月前
|
C语言
论Scanf、Gets、Getchar的区别
论Scanf、Gets、Getchar的区别
113 0
|
11月前
|
缓存 数据安全/隐私保护 程序员
getchar函数输入与缓冲区
getchar函数输入与缓冲区
108 0