scanf的返回值探究

来源:互联网 发布:datediff函数怎么用sql 编辑:程序博客网 时间:2024/05/21 07:03

在oj做题时while循环中使用scanf时,有时会出现Output Limit Exceed错误,弄得我很纠结,最后只能通过去掉while循环来避免。今天决定把根找出来,功夫不负有心人,原来有人也碰到过类似的纠结,先转贴如下,与各位共享。

scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
不经意中发现scanf()的返回值问题,自己试验和了解了一下,一些所知与各位分享;
void main()
{
int a;
int b;
int c;
int x;
printf("请输入三个整数:/n");
int x=scanf("%d%d%d",&a,&b,&c);
printf("%d/n%d/n",a,x);
}
1.scanf()函数有返回值且为int型。
2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。
从上边的例子中可以得到验证,这里用变量x接收scanf()函数的返回值,并输出显示出来。当运行中输入三个整数:5 6 7则x的值为3;如果输入5 6 d(即给c 赋值不正确)则x的值为2;如果输入5 t d(即给b和c 赋值不正确)则x的值为1;如果输入d 5 2 则输出-858993460和0,也就是说第一个字符d输入错误,整个scanf没有收到输入值。

其实scanf()的返回值对我们来说也很有用的,比如我们在使用这个函数进行接收值时,我们很必要知道对要给赋值的变量是否正确的赋值成功了,所以可以使用if(scanf("%d,%d",&a,&b)==2)这样语句来判断是否正确的给所有的变量赋值了,正确的话才能使用这个变量参与运算,这样才能提高我们代码的安全性,所以这个返回值也是大有用途的。
 下面是这篇文章来源:
本篇文章来源于:开发学院
http://edu.codepub.com   原文链接:http://edu.codepub.com/2009/0617/6498.php