scanf函数的返回值与正确输入数据的个数有关,当输入有错误时,错误输入之前正确输入数据的个数即为scanf的返回值。简而言之,scanf返回值等于读取到正确数据的个数。
初学者可能会问:scanf函数竟然有返回值?别急,我们先用一个简单的例子体会一下:
判断多个数的奇偶性:
#include<stdio.h>
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;
}
注:odd表示奇数,even表示偶数。
scanf("%d", &i) == 1判断条件实现了数据的多次读取,那么也就说明了当输入int数据时,scanf函数的返回值是1,因为只有这样循环才能不断执行。
那么有些的小伙伴可能要说:“我明白了,scanf函数的返回值是1。”,这是完全错误的,scanf函数的返回值不是定值!
我们再看一个例子:
题目要求:能输入多组数并比较每组数中两个数的大小。
大家可以先想一下用什么循环判断条件,还能是scanf返回值为1吗?
代码:
#include <stdio.h>
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("%d %d", &a, &b) == 2,实现了循环读取。因此,就目前来看,可以猜想:输入的数据有多少个,其返回值就是多少。
但是,当输入x和1时,程序结束,说明scanf的返回值不是2,那又是多少呢?
这里,通过两个代码进行测试:
scanf的返回值为0!
这次scanf的返回值为2! 说明scanf读取到错误数据停止了