用恋爱脑搞懂scanf的返回值

虽然很少用到,但scanf是有返回值的,它返回的是成功输入的变量个数。

但是什么算成功输入呢?

先来看一个相亲节目。

#include<stdio.h>
int main(){
    int i,j,k;
    k=scanf("%d %d", &i, &j);
    if(2==k)
        printf("恭喜%d号和%d号二位嘉宾牵手成功,从此由单打运动员转为双打运动员!\n", i, j);
    else if(1==k)
        printf("%d号嘉宾,未来可期,不过今天,你只能孤身一人!\n", i);
    else if(0==k)
        printf("对不起,出场嘉宾恋审不通过,不符合牵手要求!\n");
    else
        printf("这世界空荡荡的,连一个渴望爱的孩子都没有!\n");
    return 0;
}

代码中的条件语句代表着scanf函数可能出现不同的返回值,下面逐一讨论。

(1)k=2:前2个输入成功。代码中的scanf意思是,给我依次输入两个整数。显然如果输入完全满足它的要求,就代表成功输入了两个变量,所以返回值是2。比如输入9和5,代表牵手成功。如果输入超出2个整数呢,比如9、5、2、7,那也依然满足“依次输入两个整数”,所以后面的值会被忽略掉,依然返回2。也就是说,上面代码中k的返回值不可能大于2。

(2)k=1:前1个输入成功。比如输入3 x,只有第一个是整数,故返回1,未牵手成功。

(3)k=0:前0个输入成功。注意它是从第一个输入的数据开始依次判断,是整数就计为输入成功,直到遇到不是整数的输入为止。但如果第一个输入的数就不是整数,就会直接返回0。比如输入x 3,虽然第二个是整数,但这个3并不会被输入。

(4)k=EOF:直接结束输入。EOF表示输入结束,一般其值为-1。在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键,即可结束输入。在Linux下,输入完毕后按Ctrl+D键即可结束输入。所以,如果程序运行后直接输入“结束输入”指令,就会返回EOF。上面的结束输入快捷键是强制性的,一旦输入立即结束输入。

所以,上面说的第2种情况,先输入3,再输入Ctrl+Z也会有同样的输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金创想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值