scanf函数中遇到的问题

这几天刷题老遇到scanf函数读取不了的情况,于是我就上网一搜,发现scanf函数真的非常奇妙,于是便有了这篇文章。

这几天没更新的原因是我中招了,以后没有伤病情况下会正常更新。


scanf的基本格式想必大家都会写,这里就不做举例演示了


首先我们要知道scanf'函数的转化原理:
1.    我们在输入前未被scanf存起来的值,其实都是字符,例如数字123,在为被存起来是字符‘1’         ‘2’ ‘3’ 而经过%d转换完成后才变成数字123
2.    “缓冲区”(划重点,这个可太恶心了,困扰我好几天)

        当程序运行到scanf时,这个时候程序会从缓冲区这个里面读取

注意:

当数据类型时%d的时候:系统会忽略缓冲区的(空格,回车,Tab按键,等);

而%c时:系统会读取缓冲区中排在第一个的字符包括(空格,回车,Tab按键,等,无论是什么字符)。

下面看案例

 

在这个例子中,我们可以直观清楚看到,我们输入   123 回车    后,a中存储的数据是123,而b中存储的是\n,这就直观的说明了注意中所提到的问题。

遇到这个问题我们可以利用getchar()把\n放入,便不会出现这中状况。


还有一类情况就是scanf函数中%d后面的问题

在scanf函数后面不能加空格,\n(画圈圈,下课考)

 

 

假如你加入空格和\n后,就是这种情况,输入后读取不了,即使你按了1w行空格他还是闪光标。

原因是因为程序会一直忽略空白符,除非有非空白符的出现,程序才会读取,否则不论我们怎么按回车键他一直都读取不了。


 最后我们总结一下:

1.   在我们使用scanf函数时,一定要注意缓冲区这个东西

2.   明确%d和%c的使用规则,注意%c吞字符的事情

3.   scanf函数后面不能加空格,\n等,一定要注意

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值