C语言基础 -- scanf函数的返回值及其应用
前言、scanf函数有返回值
我们在作PTA上的编程作业时,经常在编译窗口会看到如下的信息:
warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
当时老师一定会告诉你,这个一个"warning"的报警,可以不用管它,也确实如此。不过,这条报警信息我们至少可以知道一点,就是scanf函数调用完之后是有一个返回值的,下面我们就要对scanf返回值进行详细的讨论。并给出在编程时利用scanf的返回值可以实现的一些功能。
一、scanf的返回值
我们先来看一个例子。
输入:
3 5
代码:
#include <stdio.h>
int main () {int a,b,c;c = scanf("%d%d", &a, &b);printf("the return value of scanf is: %d\n", c);return 0;
}
输出:
the return value of scanf is: 2
从这个例子我们可以看出,scanf函数确实是有返回值的。当我们执行上面的代码,并输入两个数3和5时,首先会执行scanf函数的调用,输入了两个整数(完成输出后scanf就有了返回值),然后执行printf函数,按照格式把scanf的返回值输出。从这个例子我们也可以大胆的猜测,scanf函数的返回值,就是scanf正确读入的变量的个数。这个猜测对了一半,完整的表述应该是:
scanf函数的返回r满足:(1)当输入流中有输入时,r等于scanf函数正确读入的变量的个数;(2)当输入流中没有输入时,r等于-1。
注意:没有输入和没有正确输入是不一样的情况,我们下来举例说明。
代码:
#include <stdio.h>
int main () {int a,b;printf("%d\n", scanf("%d,%d", &a,&b));return 0;
}
对于上面 的代码,我们分别给出三个输入和输出的例子来说明。
输出1:
3 5
输出1:
1
注意代码中scanf函数调用的第一个参数,也就是格式匹配字符串为"%d,%d",而输出流中的输入为"3 5"。显然对输入流中的'3',scanf函数可以正确输入;然后按照格式匹配字符串,3后面应该匹配一个',',但是输入流里面却没有正确匹配,所以scanf就无法继续输入而返回。因为已经有了一个正确输入,故返回值就是1。
输出2:
,3,5
输出2:
0
这个例子中,输入流中第一个(非空白)字符','就与匹配字符串种的第一个字符'%d'不匹配,从而scanf函数无法继续输入而返回。这时并没有正确输入,故返回值是0。
输出3:
^Z
输出3:
-1
注意输入3中的输入并不是"^Z",而是在windows下用ctrl+z模拟了没有任何返回值,在mac下用ctrl+d,在PTA平台上就是输入为空。这时输入流中根本没有任何输入,故返回值是-1。
二、scanf函数返回值的妙用
我们经常在PTA作业里遇到这样的输入问题,就是需要你输入一些数据,但是又没有告诉你这些数据一共有多少个,这时候我们用scanf的返回值就可以解决这个问题。
举一个具体的例子:要求输入一组整数,并且按输入次序输入这组整数的奇偶,奇数输入1,偶数输出0。
输入样例:
12 23 34 45 56 67 78 89 91 13 24 35
输出样例:
0 1 0 1 0 1 0 1 1 1 0 1
代码:
#include <stdio.h>
int main () {int a;while(scanf("%d", &a) != EOF) {printf("%d ", a%2);}return 0;
}
上面的代码,我们用了while循环结合scanf函数的返回值,完成了对未知个数据的输入。具体来说:while的循环条件就是scanf("%d", &a) != EOF,这了EOF就等-1,直接写成-1也可以。当输入流中还有输入时scanf("%d", &a)的返回值就不可能等与-1,循环条件为真,循环就继续。当scanf扫描的输入流的末尾,没有东西可以输入时,scanf("%d", &a)返回-1,循环条件为假,循环结束。
注意:如果输入的是若干个字符,中间用空格隔开,则需要在匹配字符串中适当的位置匹配空格。
相关文章:
C语言基础 -- scanf函数的返回值及其应用
前言、scanf函数有返回值 我们在作PTA上的编程作业时,经常在编译窗口会看到如下的信息: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result] 当时老师一定会告诉你,这个一个&qu…...

mac 安装 selenium + chrome driver
前言 使用 selenium 模拟浏览器渲染数据,需要依赖各浏览器的驱动才能完成,因此需要单独安装chrome driver 查看本地 chrome 浏览器的版本 可以看到我这里已经是 arm 架构下最新的版本了 下载对应的 chrome driver 访问下面的地址: Chrome…...

【阿里云】函数计算 X 通义千问快速部署
写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…...

el-table本地与线上的样式不一致出现错乱
使用el-table的时候有几个表头是循环出来的,出现在本地运行的时候,表头内el-input输入框样式正常,但是发布以后出现样式错乱问题 线上样式错乱: 本地正常: 出现这个问题的原因是我有几个表头是循环出来的࿰…...

C语言--从键盘输入当月利润I,求应发奖金总数。
题目描述: 企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提成10%; 利润高于100000 元,低于200000元(1000001000000时,超过1000000元的部分按 1%提成。从键盘输入当月利润I,求应发奖金总数。 int main() {int m…...

记忆科技携手中国电信,一站式存储打造坚实数字底座
11月10日,以“数字科技 焕新启航”为主题的2023数字科技生态大会在广州盛大开幕,本次大会由中国电信、广东省人民政府联合举办,是一场数字科技领域的年度盛会。忆联母公司记忆科技作为中国电信的合作伙伴之一受邀参会,深度参与了大…...

基于ssm的学生档案管理系统(有报告)。Javaee项目,ssm项目。
演示视频: 基于ssm的学生档案管理系统(有报告)。Javaee项目,ssm项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍ÿ…...
阿里云服务中断事件:原因、影响与解决方案
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰 如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊 文章目录 阿里云服务中断事件:原因、影…...
搜维尔科技:「体育类」Movella Xsens极限运动捕捉测试
搜维尔科技:「体育类」Movella Xsens极限运动捕捉测试...

CSS常用示例100+ 【目录】
目前已有文章 11 篇 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS相关…...

Shopee买家通系统之注册虾皮买家号大概需要多少成本
想要注册大量的虾皮买家号,可以使用shopee买家通系统进行注册,这款软件可以全自动化的注册虾皮买家号,不过想要自动化更方便,对于账号资料有一定的要求。 1、现在注册虾皮买家号基本上都是需要用手机号注册了的,而虾皮…...

华为层层“能力外溢”,让数智世界一触即达——选择华为,让您的企业轻松数智化
作者 | 曾响铃 文 | 响铃说 7万多人现场观赛,手机信号不掉链子,能发图片视频、能分享朋友圈; 消防、闸机等多个安防系统联动,风险事件自动报告,观赛、办赛安心; 运营数据全面打通、实时更新,…...

MHA实验和架构
什么是MHA? masterhight availabulity:基于主库的高可用环境下可以实现主从复制、故障切换 MHA的主从架构最少要一主两从 MHA的出现是为了解决MySQL的单点故障问题。一旦主库崩溃,MHA可以在0-30秒内自动完成故障切换。 MHA的数据流向和工…...

C语言——函数
导读 : 这篇文章主要讲解一下C语言函数的一些基本知识。 前言:函数的概念 C语言中的函数又常常被称为子程序,是用来完成某项特定的工作的一段代码。就像我们生活中的模块化建造技术,类比模块化建房子的过程:整个程序…...

DDR SDRAM 学习笔记
一、基本知识 1.SDRAM SDRAM : 即同步动态随机存储器(Synchronous Dynamic Random Access Memory), 同步是指其时钟频率与对应控制器(CPU/FPGA)的系统时钟频率相同,并且内部命令 的发送与数据传输都是以该时钟为基准…...

RocketMQ(4.9.4)学习笔记 - 安装部署
单机部署: 官网文档地址: https://rocketmq.apache.org/zh/docs/4.x 参考文档: windows安装RocketMQ_rocketmq windows_book多得的博客-CSDN博客 下载地址: https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.…...

虚拟局域网
虚拟局域网(VLAN) VLAN建立于交换技术的基础之上 广播域(broadcast domain):其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收,这部分网络就叫广播域利用以太网交换机可以很方便地实现虚拟局域网VLAN(Virtual LAN)对于一个主机和…...

【PG】PostgreSQL 预写日志(WAL)、checkpoint、LSN
目录 预写式日志(WAL) WAL概念 WAL的作用 WAL日志存放路径 WAL日志文件数量 WAL日志文件存储形式 WAL日志文件命名 WAL内容 检查点(checkpoint) 1 检查点概念 2 检查点作用 触发检查点 触发检查点之后数据库操作 设置合…...

一文了解VR全景拍摄设备如何选择,全景图片如何处理
引言: 在如今的数字化时代,虚拟现实(VR)技术不仅为我们的生活增添了许多乐趣,也为摄影领域带来了新的摄影方式,那么VR全景拍摄如何选择设备,全景图片又怎样处理呢? 一. VR全景拍摄设…...
Linux下docker安装mysql8.0
下载mysql8.0docker镜像 docker pull mysql:8.0 查看下载的docker镜像 docker images创建挂载目录 mkdir -p /data/mysql/conf mkdir -p /data/mysql/data mkdir -p /data/mysql/logs运行 docker run -p 3306:3306 --name mysql --restartalways --privilegedtrue \ -v /da…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...