浅谈getchar

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

浅谈getchar

 

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

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

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

注*getchar获取的只是字符

浅谈getchar

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

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

为什么呢?

浅谈getchar

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

 浅谈getchar

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

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

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

因此应该用int 来初始化getchar

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

浅谈getchar

 

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

为什么?

浅谈getchar

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

有没有什么办法解决呢?

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

这样就可以正常输入的 

浅谈getchar

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

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

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

浅谈getchar

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

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

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

如何解决? 

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

浅谈getchar

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

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

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

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

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

上一篇:[JOISC2014] 挂饰


下一篇:代码