2021-05-10

1 篇文章 0 订阅
1 篇文章 0 订阅

小白对于C语言scanf()函数返回值的理解笔记:

初学C语言,用书《C primer plus》,对输入验证做此笔记。

首先,什么是函数返回值?

scanf函数输入后会返回一个值
比如: result= scanf("%d %d %d %d",&a,&b,&c,&d);
那么result的值就是scanf函数的返回值。
(result为整型,其他的话会警告)

我在学习C语言的初期(现在),经常性发现输入和输出不匹配,多次检查自己的scanf函数的输入,很麻烦,但是前面看到while(scanf("%d",&a)==1)不明白,现在哥哥我学到字符输入验证,诶,我初步明白了~多年以后看到这条希望自己已经能成为一个计算机大佬!

① scanf()函数的返回值的具体值就是:从左往右数键盘输入的有效的值的个数,如果有不合法的或者EOF则计算前面合法的字符
拿上面举例来说,我要输入4个整数,如果我输入是4个整数:1,2,3,45 这样的,那么就返回了4个正确的输入,result理所当然就是4了。如果输入: 1,2,a,b,那么result就是2了。这里我就懂了,但是如果,输入:a,1,2,3这种前面错的结果是什么?是:0。再来看输入:1, a,2,3,这个输出什么,是1。再来输入:1,2,a,4,输出是:2。也就是说后面的无论是否合法,也只输出第一个不合法字符前的合法值的数目,即scanf()函数的返回值。

②来说result= scanf("%d %d %d %d",&a,&b,&c,&d);的返回值,这也是看了书和其他大佬的回答做的笔记。有三种:

(1)当开始第一个是合法输入开始,那么就是上面说到的输出第一个不合法字符前的合法值的数目

(2)这种就是开头很不幸就输错了,就像你写作文一样,题目直接偏题了,老师来个大大的0

(3)第三种是EOF,是开头输入Ctrl+Z(有些事Ctrl+D)导致函数返回值直接就是:-1,如果在中间输入Ctri+z 那结果和(1)就是一样的。至于理解,初期我感觉scanf()函数的返回值是用于循环的判断或者输入的判断以及结尾的检测,而这个EOF(Ctrl+z)相当于文件的结尾标志,如果我看到的文章结束了,那么就会检测到EOF这个符号。当然它就是一个值为**-1**,在屏幕中并不会出现,所以可以在循环中用来检测结尾等。

我现在接触的习题就是用这个结束循环输入

while(scanf("%d",&a) == 1 )

如果我输入’q’,那么循环结束,适合做不确定数量的累计算。

EOF可以用来判断文件结尾等等
while( (ch=getchar()) != EOF )

总结:scanf()函数返回值就像吃桶装薯片一样,如果你开头第一片就吃到发霉的,你肯定就不吃,那就是0;如果你吃完了五片,看到第六片,那你是不是就吃了五片,后面再都不会吃了,那反馈给你的就是5;还有一种就是,你忙着打游戏,没看桶的正反面,反手一掏,完了!反了!直接捅到桶的底面,这个底面就是EOF,它告诉你,兄弟! 我是底啦宝! 我们就为了避免尴尬,给它使用了负数大法’-1’!哼!

笔记写得自己看得懂和记忆深刻就OK,勿喷啊大佬们!有错在下面指出来,十分感谢!如果对这个“函数返回值”有更好的指点可以探讨一下!!!三克油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值