当前位置: 首页 > news >正文

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上的编程作业时&#xff0c;经常在编译窗口会看到如下的信息&#xff1a; warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result] 当时老师一定会告诉你&#xff0c;这个一个&qu…...

mac 安装 selenium + chrome driver

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

【阿里云】函数计算 X 通义千问快速部署

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…...

el-table本地与线上的样式不一致出现错乱

使用el-table的时候有几个表头是循环出来的&#xff0c;出现在本地运行的时候&#xff0c;表头内el-input输入框样式正常&#xff0c;但是发布以后出现样式错乱问题 线上样式错乱&#xff1a;​ 本地正常&#xff1a; 出现这个问题的原因是我有几个表头是循环出来的&#xff0…...

C语言--从键盘输入当月利润I,求应发奖金总数。

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

记忆科技携手中国电信,一站式存储打造坚实数字底座

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

基于ssm的学生档案管理系统(有报告)。Javaee项目,ssm项目。

演示视频&#xff1a; 基于ssm的学生档案管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项目介绍&#xff…...

阿里云服务中断事件:原因、影响与解决方案

&#x1f495;欢迎大家&#xff1a;这里是CSDN&#xff0c;我总结知识的地方&#xff0c;欢迎来到我的博客&#xff0c;感谢大家的观看&#x1f970; 如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦&#x1f60a; 文章目录 阿里云服务中断事件&#xff1a;原因、影…...

搜维尔科技:「体育类」Movella Xsens极限运动捕捉测试

搜维尔科技&#xff1a;「体育类」Movella Xsens极限运动捕捉测试...

CSS常用示例100+ 【目录】

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

Shopee买家通系统之注册虾皮买家号大概需要多少成本

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

华为层层“能力外溢”,让数智世界一触即达——选择华为,让您的企业轻松数智化

作者 | 曾响铃 文 | 响铃说 7万多人现场观赛&#xff0c;手机信号不掉链子&#xff0c;能发图片视频、能分享朋友圈&#xff1b; 消防、闸机等多个安防系统联动&#xff0c;风险事件自动报告&#xff0c;观赛、办赛安心&#xff1b; 运营数据全面打通、实时更新&#xff0c…...

MHA实验和架构

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

C语言——函数

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

DDR SDRAM 学习笔记

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

RocketMQ(4.9.4)学习笔记 - 安装部署

单机部署&#xff1a; 官网文档地址&#xff1a; https://rocketmq.apache.org/zh/docs/4.x 参考文档&#xff1a; windows安装RocketMQ_rocketmq windows_book多得的博客-CSDN博客 下载地址&#xff1a; https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.…...

虚拟局域网

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

【PG】PostgreSQL 预写日志(WAL)、checkpoint、LSN

目录 预写式日志&#xff08;WAL&#xff09; WAL概念 WAL的作用 WAL日志存放路径 WAL日志文件数量 WAL日志文件存储形式 WAL日志文件命名 WAL内容 检查点&#xff08;checkpoint&#xff09; 1 检查点概念 2 检查点作用 触发检查点 触发检查点之后数据库操作 设置合…...

一文了解VR全景拍摄设备如何选择,全景图片如何处理

引言&#xff1a; 在如今的数字化时代&#xff0c;虚拟现实&#xff08;VR&#xff09;技术不仅为我们的生活增添了许多乐趣&#xff0c;也为摄影领域带来了新的摄影方式&#xff0c;那么VR全景拍摄如何选择设备&#xff0c;全景图片又怎样处理呢&#xff1f; 一. 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…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...