关于scanf的返回值

在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的返回值是在错误输入前正确与格式化参数匹配的个数


猜你喜欢

转载自blog.csdn.net/m0_37687058/article/details/79844570