scanf函数返回值占位符详解,%*,%[]的应用

前言

scanf函数可以说是我们一开始就会接触的函数了,但在最近复习时我又找到而来一些之前不甚了解或是块要遗忘的知识,特作此篇。

一.返回值

我们之前提到了scanf返回值被忽略的问题:

scanf函数返回值被忽略-CSDN博客

那么scanf的返回值到底是什么呢

这个是他的声明

这个则是返回值的描述

翻译

scanf返回成功转换和分配的字段数;返回值不包括已读取但未分配的字段。返回值为0表示没有分配任何字段。如果在第一次尝试读取字符时发生错误,或者遇到文件结束字符或字符串结束字符,返回值为EOF。

由此我们可以知道,他返回的就是实际读取并成功赋值的变量数量,举个例子

第一种情况

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {int a;char b;char* c[5];
printf("%d",scanf("%d %c %s", &a, &b, c));return 0;
}

可以看到,返回值是3

第二种情况:

没有读取任何项:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {int a;
printf("%d",scanf("%d", &a));return 0;
}

输入a,%d占位符不会读取进去,并且程序会立即终止,所以返回值是1

第三种情况:第一次尝试读取字符时发生错误,或者遇到文件结束字符

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {int a;
printf("%d",scanf("%d", &a));return 0;
}

我们只需要连着按三次ctrl+z即可,至于为什么是三次,这是vs的一个小问题,搬来正常情况是按一次就行的。,EOF是个宏定义,它就是-1

二占位符

ok,解决了返回值的问题之后我们再来看看占位符,

先来几个基本的

1.%d   对应整形            %c对应字符               %s对应字符串                     %f单精度浮点数         %lf双精度浮点数

然后是与之相关的:

2.%hd  对应十进制的short int           %ho对应八进制的short int        %hx对应十六进制的short int

%hu  对应unsigned short int

3.%ld 十进制long int    %lo  八进制long int      %lx   十六进制long int       %lu  unsigned long int

4.%lld十进制的long long int         %llo八进制的long long int            %llx 十六进制的long long  int

%llu  long long unsigned int

5.%o 八进制int         %x十六进制int            %zd    size_t

然后是少见的

%g:6个有效数字的浮点数,整数部分超过刘伟后就会自定转化为科学计数法,且指数部分为小写e

%G:与%g相同,但指数部分为大写G。

%e:使用科学计数法的附带念书,指数部分e小写,

%E:与%e一样,但指数部分E大写。

%le 科学计数法表示的long double

ok,接下来才是今天的主角%*与%[].

1.%*

他是一个赋值忽略符,该占位符不会将解析而后的值放入对应变量中,而是直接丢弃

举例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {int a;
scanf("%*d%d", &a);
printf("%d", a);return 0;
}

可以发现,我们先输入的3不见了,而后输入的2则被用于给a赋值

2.%[]

[]内指定一组字符,遇到不在集合中的字符时读取结束,这里就要引入“^”了,在这里^表示”非“,

举例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {char a[10];
scanf("%[^\n]", a);
printf("%s", a);return 0;
}

可以发现,此次读取是到回车才停下来的,[^\n]表示的也正是非回车,基于此我们可以更为便捷的调用scanf函数。

ok今天关于scanf函数的分享就到这里了,觉得有用的话就点个免费的赞支持一下吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式系统架构设计之分布式系统实践案例和未来展望

分布式系统在过去的几十年里经历了长足的发展&#xff0c;从最初的简单分布式架构到今天的微服务、云原生等先进架构&#xff0c;取得了丰硕的成果。本文将通过实际案例分享分布式系统的架构实践&#xff0c;并展望未来可能的发展方向。 一、实践案例 1、微服务化实践 背景 …

tcp/ip实现两个手机之间连接同步显示

app主界面 选择一&#xff1a;TCP客户端 选择二&#xff1a;TCP服务端 点击下图item时进入曲线绘制页面 如果是服务器端它不需要连任何设备就可以直接进入绘制界面如果是TCP的话就不能直接进入&#xff0c;否则就会提示未连接网络连接不能放在主线程&#xff0c;页面去调方法&…

IP地址的四大类型:动态IP、固定IP、实体IP、虚拟IP的区别与应用

在网络通信中&#xff0c;IP地址是设备在互联网上唯一标识的关键元素。动态IP、固定IP、实体IP和虚拟IP是四种不同类型的IP地址&#xff0c;它们各自具有独特的特点和应用场景。 1. 动态IP地址&#xff1a; 动态IP地址是由Internet Service Provider&#xff08;ISP&#xff…

Python跨年烟花秀

写在前面 今年跨年怎么过呢~博主用python的pygame实现了一场炫酷的烟花秀&#xff0c;一起来看看吧&#xff01; 环境需求 python3.11.4及以上PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境…

STM32CubeMX学习(二) USB CDC 双向通信

STM32CubeMX学习&#xff08;二&#xff09; USB CDC 双向通信 简介CubeMX新建工程&#xff08;串口LED&#xff09;测试串口和LED串口接收测试USB CDC通信 简介 利用正点原子F407探索者开发板&#xff0c;测试基于USB CDC的双向数据通信。 CubeMX新建工程&#xff08;串口LE…

Prometheus通过consul实现自动服务发现

环境,软件准备 本次演示环境&#xff0c;我是在虚拟机上安装 Linux 系统来执行操作&#xff0c;以下是安装的软件及版本&#xff1a; System: CentOS Linux release 7.6Docker: 24.0.5Prometheus: v2.37.6Consul: 1.6.1 注意&#xff1a;这里为了方便启动 Prometheus、Consul服…

Vue Tinymce富文本组件自定义带下拉框的操作按钮

想实现如下效果 首先在init方法中的props&#xff0c;toolbar属性增加一个自定义按钮 增加一个setup方法 代码 setup: function(editor) { editor.ui.registry.addSplitButton(myDateButton, {text: 日期时间,onAction: (_) > editor.insertContent(getJsMonthDay(getNowDat…

Spring 是如何解决循环依赖的

1.什么是循环依赖? 所谓的循环依赖是指&#xff0c;A 依赖 B&#xff0c;B 又依赖 A&#xff0c;它们之间形成了循环依赖。或者是 A 依赖 B&#xff0c;B 依赖 C&#xff0c;C 又依赖 A。它们之间的依赖关系如下&#xff1a; 2.通过手写代码演示理解Spring循环依赖 DEMO: pu…

【机器学习】深度学习概论(二)

五、受限玻尔兹曼机&#xff08;Restricted Boltzmann Machine&#xff0c;RBM&#xff09; 5.1 RBM介绍 示例代码&#xff1a; Python 编写了一个简单的 RBM 实现&#xff0c;并用一些假数据训练了它。然后&#xff0c;他展示了如何用 RBM 来解释用户的电影偏好&#xff0c;以…

使用rust读取usb设备ACR122U的nfc卡片id

rust及其高效和安全著称&#xff0c;而且支持跨平台&#xff0c;所以就想使用这个rust开发一个桌面端程序&#xff0c;来读取nfc设备的nfc卡片的id信息&#xff0c;下面就做一个最简单的入门教程吧&#xff0c;也是我写的第三个rust应用。 当你电脑上安装好了rust环境之后&…

MySql篇——MySql使用常见问题及解决办法

这里汇总MySql使用常见问题及解决办法&#xff0c;会持续更新。 问题1.ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。 含义&#xff1a;你设置的密码不符合当前的密码等级。 可使用 SHOW VARIABLES LIKE validate_password%; 查看…

Spring-4-代理

前面提到过&#xff0c;在Spring中有两种类型的代理&#xff1a;使用JDK Proxy类创建的JDK代理以及使用CGLIB Enhancer类创建的基于CGLIB的代理。 你可能想知道这两种代理之间有什么区别&#xff0c;以及为什么 Spring需要两种代理类型。 在本节中&#xff0c;将详细研究代理…

count distinct在spark中的运行机制

文章目录 预备 数据和执行语句Expand第一次HashAggregateShuffle and Second HashAggregate最后结果性能原文 预备 数据和执行语句 SELECT COUNT(*), SUM(items), COUNT(DISTINCT product), COUNT(DISTINCT category) FROM orders;假设源数据分布在两个1核的结点上&#xff0…

ElasticSearch 聚合统计

聚合统计 度量聚合&#xff1a;求字段的平均值&#xff0c;最小值&#xff0c;最大值&#xff0c;总和等 桶聚合&#xff1a;将文档分成不同的桶&#xff0c;桶的划分可以根据字段的值&#xff0c;范围&#xff0c;日期间隔 管道聚合&#xff1a;在桶聚合的结果上执行进一步计…

【Java 进阶篇】Redis 缓存优化:提升应用性能的不二选择

在现代的软件开发中&#xff0c;性能一直是开发者们追求的目标之一。对于数据库访问频繁、数据读取较慢的场景&#xff0c;使用缓存是提升性能的有效手段之一。而 Redis 作为一款高性能的内存数据库&#xff0c;被广泛用作缓存工具。本文将围绕 Redis 缓存优化进行详解&#xf…

swing快速入门(三十二)消息对话框

注释很详细&#xff0c;直接上代码 上一篇 新增内容 1.自定义对话框前列图标 2.消息对话框的若干种形式 package swing21_30;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent;public class swing_test_30 {// 定义一个JFrameJFrame jFrame n…

Modbus,DNP3的理解

Modbus&#xff0c;DNP3的理解 目录概述需求&#xff1a; 设计思路实现思路分析1.概念理解3.区别 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for…

【远程开发】穿越跳板机和CLion远程开发——全面配置流程

文章目录 穿越跳板机配置 ProxyJump 方案Cygwin上的配置 建立 SSH Tunneling 方案 代码映射目录映射方案配置Rsync加速 远程服务器方案(todo) 远程Debug tips&#xff1a;本文讲了两种穿越跳板机的方案(推荐ProxyJump方案)&#xff0c;和两种代码映射的方案。实际任选一对搭配即…

【基础篇】七、线程上下文类加载器打破双亲委派机制

文章目录 1、SPI机制2、JDBC案例之SPI机制3、打破双亲委派机制&#xff1a;线程上下文类加载器4、打破双亲委派机制&#xff1a;osgi模块化5、JDK9之后的类加载器6、小总结 1、SPI机制 SPI&#xff0c;Service Provider Interface&#xff0c;是JDK内置的一种服务提供发现机制…

Evidential Deep Learning to Quantify Classification Uncertainty

本片文章发表于NeurIPS 2018。 文章链接&#xff1a;https://arxiv.org/abs/1806.01768 一、概述 近年来&#xff0c;神经网络在不同领域取得了革命性的进步&#xff0c;尤其是在dropout、normalization以及skip connection等方法被提出之后&#xff0c;撼动了整个机器学习领…