c语言scanf输入丢失问题和分析


前言

在用scanf输入字符时,scanf会把回车符\n当成你要输入的一个字符,从而导致了字符的丢失。

提示:以下是本篇文章正文内容,下面案例可供参考

一、实例

char a;
scanf("%c",&a);
char b;
scanf("%c",&b)

如上面的代码,我们期待它读到的是我们输入的字符a,b。当实际上当我们输入字符a敲完回车后,我们会发现程序神奇地跳过给scanf输入b的环节,直接开始执行我们之后的代码了。难道我敲代码已经达到人码合一的境界了吗? 当然不是。我们键盘敲一下回车相当与输入了\n(可能还有\r)而正是\n被c语言当成了你要输入的字符,直接把\n赋给了变量b。

二、解决方法

1.getchar()

代码如下(示例):

char a;
scanf("%c",&a);
getchar();
char b;
scanf("%c",&b)

在第一个scanf后面加上一句getchar()。这句代码的意思是从缓存区(这里涉及计算机组成)里获取一个字符,但是我们有没有把获得的那个字符赋给一个变量储存起来,所以这个字符又被丢弃了。所以我们可以通过这句代码来把键盘每次输入的回车也就是\n,丢掉。

2.fflush()

char a;
scanf("%c",&a);
fflush();
char b;
scanf("%c",&b)

道理和getchar差不多。不过这次我们不取了,直接丢掉。我们把缓存区的内容清理。

3./n

char a;
scanf("%c\n",&a);
char b;
scanf("%c",&b)

我们也可以把在第一个scanf里加上\n。c语言把缓存区中的那个\n当成一个输入格式,而不是一个赋给b的字符。

总结

在使用scanf输入字符时要格外注意。
题外话,这是我第一篇blog,希望我能在学习的道路上不断前行。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值