scanf函数的返回值

  今天给大家讲一下对于C语言初学者可能会遇到的问题

1.scanf函数的返回值

下面有一段简单代码:

 

从运行结果中看完全没问题

 

但如果你是用VS编译器,就会出现以下警告:

提示 返回值被忽略:"scanf"  (其实这种情况我们完全可以忽略它,就当成代码是正确的来看待)

 

 想深入了解的可以往下看哈哈!

推荐大家去 cplusplus 网站去查这个函数(不仅是这个函数,它的功能挺强大的),以下是我查的,可以看到返回值类型为 int 

 我们不妨用一个整型变量来接收它,然后再输出。

上干货scanf返回值输入的数据的个数(通俗点就是scanf()的双引号里有几个%号),不过前提是要正确输入数据。

什么是正确输入数据:

上示例代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
    
    int a = 0;
    int b = 0;
    int c = 0;
    printf("请输入三个整数:");
    int x = scanf("%d%d%d",&a,&b,&c);
    printf("%d",x);

    return 0;
}

1.如果输入 1 2 3,  返回值为 3

 

2.如果输入 1 2 a, 返回值为 2   (a表示我没按照scanf的格式符%d输入,也就是不符合格式符形式的输入

 

 3.如果输入 1 a a, 返回值为 1

 

4.如果输入 a a a, 返回值为 0

 5.如果输入 a 1 2, 返回值为 0

 

6.如果输入 a 1 a, 返回值为 0

 

结论  :scanf返回的是到第一个错误输入为止  (如果没有错误输入,那就到结尾)  所有符合格式符输入的个数。

但是

改一下语句

 int x = scanf("%d%d%d",&a,&b);   去掉了&c

输入 1 2 3, 返回值为 3

 此式子中格式占位符%d有三个,但对应的输入表项只有两个,但是运行时依旧被要求输入三个(windows,VS/DevC++)。输入的第三个整数确实没有承接变量,它被放到了缓冲区里面。但当输入是 1 2 3 三个整数时,返回值仍是3。

结论:  scanf函数的返回值反映的是按照指定的格式符正确读入的数据的个数。而不管你输入表项是否齐全。(通俗点说,就是在正确输入数据的前提下,双引号中%号的个数)。

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去北极避暑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值