在A题的时候,我们经常会在while()语句中写scanf的返回值,例如while(scanf("%d",&x)==1)这样的语句,今天我们就来说关于scanf的返回值问题。众所周知scanf()返回的是输入个数,但当输入不匹配或者格式化参数与实参不匹配时,scanf又是如何返回参数值的,我们来研究研究
我们先看如下代码:
(1)当匹配格式正确,而后面的实参有多余时
#include<stdio.h> int main(){ int x,y,z; int sum=scanf("%d %d",&x,&y,&z); printf("%d",sum); }
我们输入 1回车,输入2回车,然后结果就显示为2
我们由此可以得出结论,当匹配格式正确,而后面的实参有多余时,多余的实参会被丢弃,返回的是匹配个数
(2)当匹配格式正确,而后面的实参却比前面的格式化参数少时
#include<stdio.h> int main(){ int x,y,z; int sum=scanf("%d %d %d",&x,&y); //printf("%d %d\n",x,y); printf("执行这里\n"); printf("%d",sum); }
我们执行代码可以发现我们可以输入3个数字,但是程序终止在scanf语句这里,后面的并没有执行
由此我们可以得出结论,当匹配格式正确,而后面的实参却比前面的格式化参数少时,scanf()语句在对应的格式化参数输入后,程序即终止
(3)当匹配格式不正确时,格式化参数与实参个数相同
#include<stdio.h> int main(){ int x,y,z; int sum=scanf("%d %d %d",&x,&y,&z); //printf("执行这里\n"); printf("%d",sum); }
执行以上代码,我们分别对以下数据进行测试:(我们每次出入并不是按空格键,而是回车键)
a --->0
1 a------>1
1 2 a------>2
我们发现scanf语句返回的是正确匹配的个数,并在输入格式与格式化参数不匹配时,scanf语句结束输入,并向下执行
(4)当匹配格式不正确,格式化参数与实参个数不相同时
int sum=scanf("%d %d %d",&x,&y);例如这条语句,我们输入1 2 a 时sum得到值2,而我们输入1 2 3 时,scanf这里程序终止,所以这种情况scanf的返回值是在错误输入前正确与格式化参数匹配的个数