一、问题
scanf()函数是⽤于数据输⼊的,输⼊变量的值被改变,那么 scanf()函数本⾝是否有返回值?返回值有什么意义呢?
二、解答
scanf()函数的返回值很少有⼈⽤到,它是⼀个整数,⽤于表⽰成功输⼊数据的个数。来看下⾯的例⼦。
#include <stdio.h>
int main()
{
int i, j, k;
printf("请输入三个整数:\n");
scanf("%d%d%d", &i, &j, &k);
printf("i=%d,j=%d,k=%d\n", i, j, k);
return 0;
}
输出结果如下
请输入三个整数:
1 2.5 3
i=1,j=2,k=12041948
程序中,由于对整数 i 试图输⼊2.5 ⽽导致错误。实际上,i只能得 2,“.5”后的所有数据输⼊出错,不能正确赋值,因此。得不到正确结果。如果程序在这个基础上继续运⾏,会导致后⾯的错误越叠加越多。怎样由程序本身检查出这种错误呢?这时就可以⽤scanf()函数的返回值来实现。
修改⼀下程序,取出 scanf()函数返回值。如果它的值是3,那么表示所有数据均⼰正确输⼊;如果⼩于 3,必定出现错误输⼊。
#include <stdio.h>
int main()
{
int i, j, k, n = 0;
printf("请输入三个整数:\n");
// 读取三个整数,直到成功读取三个值或输入格式错误
while (n != 3)
{
n = scanf("%d %d %d", &i, &j, &k);
if (n < 3)
{
printf("格式输入错误,请重新输入。\n");
// 清空输入缓冲区,以便用户可以重新输入
while (getchar() != '\n')
;
}
}
printf("i=%d, j=%d, k=%d\n", i, j, k);
return 0;
}
输出结果如下
请输入三个整数:
1 2.5 3
格式输入错误,请重新输入。
1 2 3
i=1, j=2, k=3
三、总结
输⼊数据格式错误问题,很多初学者都会忽略,认为输⼊时总是没错的。通过 scanf() 函数的返回值,可以很好地解决这⼀问题。