这边先放一段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的理解,希望能帮助你们。
后续会持续更新我对某些小细节的理解
创作不易,动动小手点赞吧!