你知道scanf等于多少吗?——关于scanf函数的返回值

scanf函数的返回值表示成功读取的数据个数,可用于判断输入情况并作为循环条件。例如,在输入多组数据时,可以使用while(scanf("%d",&a)==1)作为循环,当接收到一个数据时继续执行,输入结束或数据格式错误时返回EOF,循环停止。要注意避免在while循环内之前额外调用scanf,以免丢失数据。
摘要由CSDN通过智能技术生成

在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。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值