虽然很少用到,但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也会有同样的输出。