scanf和getchar接收EOF的时候为什么不一样呢

吃水的鱼 发布于 2016/02/01 15:50
阅读 240
收藏 0

我在vs里面测试getchar和scanf的区别,发现对于EOF,两个识别的精度不同,scanf时,使用ctrl+z多次才能中断成功,在getchar时,ctrl+z可以直接成功中断操作,这是为什么呢,而且在使用scanf时,输入非数字,就会进入死循环,不懂为什么。

加载中
0
xpbob
xpbob
因为你用了Int类型啊,他占4个字节,getchar只会取一个字节,本来就是给char类型的,c/c++只管长度不管类型(char可以赋值给其他类型转换),你getchar只会取一个字节,但是scanf会根据你的类型取值,当然不一样,你改成char 类型的,应该结果和getchar一样
xpbob
xpbob
回复 @吃水的鱼 : 你说的不是一个问题,getchar返回的是屏幕上的值,当然也能获取到的是结束符,scanf的返回值是成功的元素个数(结尾的时候就是eof),准确说windows ctrlz统一都是2次,因为默认没有输入的时候ctrl z不写入缓冲区,所以第二个ctrl z是用来把第一个eof写入缓冲区的,ctrl z回车,ctrlz回车就可以了。
吃水的鱼
嗯,谢谢,这个我懂了,那我输入ctrl+z之后,使用scanf的程序仍然不停止,这是为什么呢,如果变量类型是char,需要输入两个ctrl+z,如果是int,需要输入四个ctrl+z,是因为类型原因吗,如何才能输入一个ctrl+z就激活scanf_s("%c",&c)==EOF呢
返回顶部
顶部