C Primer Plus 自学笔记---Chapter 5

本文探讨了在C语言编程中遇到scanf()函数因非法输入导致的死循环问题。当用户输入不符合scanf()预期的数据时,这些数据会被缓存并导致下一次循环时的错误读取。解决方案在于清除scanf()的缓存区,例如使用getchar()函数。通过理解scanf的工作原理和正确处理非法输入,可以避免这类问题的发生。
摘要由CSDN通过智能技术生成

1.如果碰到循环需要输入的,最好把scanf()语句写在循环外面,防止一些不必要的小差错产生!

2.由scanf()非法输入字符造成的死循环及其解决方案

问题初析:

死循环和while语句本身没有关系,无论使用while,do-while,for,只要是循环体,均会产生此问题。程序在后续执行中直接跳过应该由用户输入的scanf()语句;

原理分析:

经多方查找资料得,scanf()有缓存区,当输入非法字符(要求的类型与输入的类型不符合),scanf()会直接跳过,该输入及不会被接受也不会被清除,被存放在scanf()的缓存区,当下次调用scanf()函数时,会直接从缓存区读取非法字符,造成死循环。

解决思路:

清除滞留在scanf()缓存区的数据,使下一次循环时scanf()可以正常的读取用户输入。

解决方法:

注意:getchar()是放在scanf()语句前面而非后面!!!

3.两张Mindmap:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值