浅谈getchar

这边先放一段MSDN上对getchar的解释 

 

 首先第一行   读取一个字符从流中或者从标准输入中获取

流:可以理解成电脑中的缓冲区

标准输入:指的是如果你的缓冲区里面没有字符了 getchar就会等待从键盘上输入。

注*getchar获取的只是字符

 上面展示的是我们应该用int类型初始化getchar  虽然getchar是读取一个字符,但是字符在电脑中也是以ASCII值储存的,因此可以用int     

至于能不能用char来初始化   答案是不可以的    

为什么呢?

大致意思是当读取失败时,返回的是EOF   下面我们可以揭示一下啥是EOF

 

我们可以看到在vs中EOF的本质其实是-1

是一个整型  四个字节 32个比特

然后char只有一个字节  是不能返回EOF的 

因此应该用int 来初始化getchar

 下面我用一段代码来诠释getchar的用法

 

当输入上面代码的时候会发现 我们输入密码后还没有按Y/N后面的确认失败就出现了

为什么?

 我按回车后scanf才会读取 但是它只读取了ajda 我还有一个\n没有读取  所以的话当下面有一个getchar 本来是读取Y/N的 读取了\n,然后(\n!=EOF)所以会输出“确认失败”。

有没有什么办法解决呢?

只需要在输入密码(即字符串)后加一个getchar 作用是清除\n,

这样就可以正常输入的 

 但是有时候密码还会带空格 结果会和我们刚开始一样

因为getchar它只会读取一个字符 当你输入eg: asjba  sana时

还是会跟第一次情况一样的

你看 因为空格也算一个字符 

然后scanf只能读取asjba  然后后面的空格读取的是空格  之后的(s!=EOF)

所以还是会输出“确认失败”。

如何解决? 

除了gets可以读取带空格的字符串

 加上这句话 及时输入带空格的 照样可以 

因为我们每次都要按回车来输入   然后我圈出来的这句话意思就是直到遇到\n 不然会一直从缓存区中读取字符。

以上就是我对getchar的理解,希望能帮助你们。

后续会持续更新我对某些小细节的理解

创作不易,动动小手点赞吧!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天少点debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值