关于scanf()读取与返回值和回车键的问题

博客讨论了在C语言中使用scanf()函数遇到的读取和回车键问题。当链表为空时,scanf()可能导致死循环。作者提出三种解决方案:1) 使用getchar()读取回车,但可能影响后续输入;2) 读取非回车字符后放回缓冲区,复杂且需额外处理;3) 修改输入结束标志为特定字符(如'q'),避免回车干扰。通过这样的方式解决了输入为空时的处理问题。
摘要由CSDN通过智能技术生成


今天老师检查的时候说如果一个链表为空就是(while(scanf())死循环)的情况,我当时有点懵,因为文档里强调为空的情况。还好老师叫我自己现场实现一下,

 

当时想了两个方案:

   *一是用getchar()接受第一个回车(我设定的输入回车结束),如果用户第一个键盘输入就是回车,它能工作的很好。

 

但是当第一个键盘输入不是一个回车的时候,就遇到一个问题:getchar()会吃掉第一个数字的一部分,之所以说一部分是因为经过我测试发现:

 

Getchar()能返回的值最大为57,这显然是不合理的。

 

于是我想到了第二个方法:

   *先用getchar读取,如果getchar读取的不是回车,就将它重新放回缓冲区,再又scanf()函数来读取。但是这个方案有点麻烦,还要区查资料,搞明白怎么将读取的数据重新放回缓冲区。好的是在我采取这个方案之前我想到了更好的办法:

 

第三个办法:

   *将结尾判断改一下直接上图&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值