在C语言学习过程中,深深感觉到学无止境。scanf函数竟然有返回值!本文让我简单阐述一下scanf函数的返回值。
scanf函数的返回值是多少
#include <stdio.h>
int main()
{
int a=0,b=0,x=0,y=0;
x=scanf("%d",&a);
printf("%d",x);//结果显示a输入任意整数,x=1;
y=scanf("%d %d",&a,&b);
printf("%d",y);//结果显示y=2;
return 0;
}
a输入任意整数,运行结果显示,x=1;
说明x的值,即scanf的返回值和a无关。
其实scanf的返回值是输入数据的个数。因为scanf("%d",&a)只输入了一个数据,所以返回值为1。同理打印后发现结果显示y=2。
那么scanf的返回值有什么用呢?
初学c语言时,经常遇见要输入多组数据的情况,通常都需要用循环完成。但是循环的条件怎么设置呢?scanf的返回值正有此用。
scanf的返回值就能够作为多组数据输入时循环的条件。
#include <stdio.h>
int main()
{
int a=0,i=0;
while(scanf("%d",&a)==1)//或者while(scarf("%d",&a)!=EOF)
{
i++;
printf("%d",i);
}
return 0;
}
while(scanf("%d",&a)==1)意思是当scanf接收到一个数据时(返回值为1),执行循环。(按ctrl+z即可停止循环,注意vs2019需要连按三次,可能是bug)
当scanf接收数据超过1或者数据类型不符合要求(%d却输入了字符)scanf的返回值为EOF。
所以可以利用这点while(scarf("%d",&a)!=EOF)实现循环,输入多组数据。
注意:while(scanf("%d",&a)==1)这个语句在()中已经包含了scanf函数,所以无需在该语句上面写scanf("%d",&a);这样的语句,否则你第一遍输入的语句还没等程序利用,就被丢弃了。程序只执行了第二遍的数据。
#include <stdio.h>
int main()
{
int a=0,i=0;
scanf("%d",&a); //错误示范
while(scanf("%d",&a)==1)
{
i++;
printf("%d",i);
}
return 0;
}
比如你要输入两组数据:
100
111
期待的输出是:
1
2
但是当加了这一行scanf("%d",&a);(错误示范)后,结果变成
1。
因为你输入的100被scanf("%d",&a);语句接受了,此时你赋值a=100;
在之后你又输出原本的第二组数据,才被(scanf("%d",&a)==1)中的scanf("%d",&a)接受,此时a被你再次赋值为a=111。所以输出为1。