函数scanf( )的返回值 就是:
(啊啊啊为啥scanf还有返回值??)
“所输入的数据与格式字符串中匹配次数.”
简单来说就是,它返回已成功赋值的数据项数;出错时则返回EOF.
(注:EOF(End Of File)是一个预定义的常量,等于-1.)
例如,可以通过以下程序证实:
#include<stdio.h>
/*证实函数scanf()的返回值*/
int main()
{
int a,b;
int input;
/*获取scanf函数的返回值*/
input = scanf("%d %d",&a,&b);
printf("input = %d",input);
}
此例中:
-
若输入:1 2↙
输出:input = 2
说明:成功输入了两个整数.
-
若输入:1 a↙
输出:input = 1
说明:仅仅匹配了变量a,而整型变量b无法得到字符‘a’,依旧是一个未赋值前不确定的值.
如调试图:
-
若输入:a b↙
输出:input = 0
说明:均未成功读入.
如调试图:
-
若输入:^Z ^Z↙
会得到:input = -1
说明:输入出错,返回值为-1.
(注:ctrl+z输入代表输入文件结束符)
如调试图:
例如,在ACM中,一道入门题
“A+B for Input-Output Practice (I) ”中可以用到:
#include <stdio.h>
/*计算a + b*/
int main()
{
int a,b;
/*当输入不非法的时候不断读取a,b*/
while(scanf("%d %d",&a, &b) != EOF)
{
printf("%d\n",a+b);
}
}
另做参考:
#include <stdio.h>
int main()
{
int a,b;
int input = scanf("%d %d",&a,&b);
while(input != 2)/*直到两整型变量a,b同时读入整数时才跳出循环*/
{
fflush(stdin);/*清除缓冲区*/
input = scanf("%d %d",&a,&b);
}
printf("%d + %d = %d",a,b,a + b);
return 0;
}
总之,我们可以通过运用函数scanf( )的返回值的意义(即“所输入的数据与格式字符串中匹配次数”),来把控我们的输入格式的正确性.