scanf函数的返回值是什么?

scanf函数的返回值与正确输入数据的个数有关,当输入有错误时,错误输入之前正确输入数据的个数即为scanf的返回值。简而言之,scanf返回值等于读取到正确数据的个数


初学者可能会问:scanf函数竟然有返回值?别急,我们先用一个简单的例子体会一下:

判断多个数的奇偶性:

#include

void OE(int a)
{
	if (a % 2 == 1)
		printf("Odd\n");
	else
		printf("Even\n");
}

int main()
{
	int i = 0;
	while (scanf("%d", &i) == 1)
	{
		OE(i);
	}
	return 0;
}

 scanf函数的返回值是什么?_第1张图片

注:odd表示奇数,even表示偶数。

scanf("%d", &i) == 1判断条件实现了数据的多次读取,那么也就说明了当输入int数据时,scanf函数的返回值是1,因为只有这样循环才能不断执行。

那么有些的小伙伴可能要说:“我明白了,scanf函数的返回值是1。”,这是完全错误的,scanf函数的返回值不是定值!


我们再看一个例子:

题目要求:能输入多组数并比较每组数中两个数的大小。

大家可以先想一下用什么循环判断条件,还能是scanf返回值为1吗?

代码:

#include 
void max(int x, int y) 
{
    if (x > y)
        printf("%d>%d\n", x, y);
    else if (x == y)
        printf("%d=%d\n", x, y);
    else
        printf("%d<%d\n", x, y);
}
int main() 
{
    int a, b;
    while (scanf("%d %d", &a, &b) == 2)
    {
        max(a, b);
    }
    return 0;
}

代码运行结果:

scanf函数的返回值是什么?_第2张图片循环条件使用scanf("%d %d", &a, &b) == 2,实现了循环读取。因此,就目前来看,可以猜想:输入的数据有多少个,其返回值就是多少。


但是,当输入x和1时,程序结束,说明scanf的返回值不是2,那又是多少呢?

这里,通过两个代码进行测试:

 scanf函数的返回值是什么?_第3张图片

scanf的返回值为0!

scanf函数的返回值是什么?_第4张图片

这次scanf的返回值为2! 说明scanf读取到错误数据停止了


总结:

 从以上的实例分析,我们最终得出结论:scanf函数的返回值与正确输入数据的个数有关,当输入有错误时,错误输入之前正确输入数据的个数即为scanf的返回值。简而言之,scanf返回值等于读取到正确数据的个数

补充:

循环条件也可以是(scanf("%d %d",&a,&b) != EOF)

EOF是End Of File的缩写,是在 stdio.h 里定义的常量(通常值为-1),表示输入流已经结束。

你可能感兴趣的:(C语言,c语言,经验分享)