【C语言】getchar与scanf输入函数注意事项

getchar/scanf   输入函数

getchar:

  • getchar 读取到字符的时候返回的是字符的ASCII码值--->- ASCII:0~127
  • 如果读取失败,返回的是EOF---> (EOF代表值是-1)
  • getchar遇到ctrl+z就会结束(输入会造成读取失败返回EOF)
  • getchar只能读取字符!

scanf:

  • scanf函数是有返回值的返回的是实际读取到的数据的个数
  • 如果读取失败返回的EOF---> (EOF代表值是-1)
  • scanf遇到ctrl+z就会结束(输入会造成读取失败返回EOF)

getchar/scanf 注意事项

在调用  getchar和scanf  时候,getchar/scanf 都会从缓冲区拿走数据

如果键盘输入一个值 按了空格或者回车\n

scanf和getchar 只会读到 输入\n前的值

大概就是:键盘中输入的数据存放在缓冲区,scanf和getchar 函数从缓冲区读取数据,读取成功后读取的数据在缓冲区中清空,缓冲区只留下了\n 

  • 下面用一个简单输入密码登陆代码来解答一下这个问题

scanf/getchar(缓冲区)错误示范

 错误:scanf在输入一个值时(假如是abcde)按了回车就是 abcde\n 但是scanf只能读取\n前的值

这时候缓冲区就剩下\n了。   接下来getchar在想输入一个值时看见缓冲区有个 \n 直接读取了,还

来不及键盘输入。ch就等于了\n直接走到了else这步。那该问题应该怎么处理?

另外在提一个scanf注意事项:scanf 只会读到输入空格前的值 空格后的值留在了缓冲区

比如:输入abcde 123 scanf真正读取的的只有abcde,缓冲区剩下123\n

如同以上问题一起清理缓冲区

 很简单,就是在 scanf读取一个值后,while循环一个getchar把缓冲区剩下的东西读走!

如有错误,请大佬们纠正!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值