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,一经查实,立即删除!

相关文章

Web3开发成本和主要特性

多年来&#xff0c;技术不断进步&#xff0c;可帮助您的业务领先于竞争对手。如今&#xff0c;您可以看到许多更新和变化&#xff0c;使技术更加先进&#xff0c;对企业更加有用。到现在为止&#xff0c;web1.2和2.0比较流行&#xff0c;但是要知道web 3才是技术之父&#xff0…

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

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

三.Linux无名管道(PIPE)和有名管道(FIFO)的区别

目录 命名管道&#xff08;Named Pipe&#xff09;&#xff1a; 无名管道&#xff08;Anonymous Pipe&#xff09;&#xff1a; 总结&#xff1a; 无名管道&#xff08;Anonymous Pipe&#xff09;和命名管道&#xff08;Named Pipe&#xff09;都是进程间通信的机制&#x…

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…

Linux:修改和删除已有变量

变量修改 变量的修改有以下几种方式: 变量设置方式说明${变量名#匹配字串}从头向后开始匹配&#xff0c;删除符合匹配字串的最短数据${变量名##匹配字串}从头向后开始匹配&#xff0c;删除符合匹配字串的最长数据${变量名%匹配字串}从尾向前开始匹配&#xff0c;删除符合匹配…

Python跨年烟花秀

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

169. 多数元素(Java)

题目描述&#xff1a; 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 输入&#xff1a; nums [2,2,1,1,1,2,2] 输出&#xff1a…

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…

算法训练第五十一天|300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列&#xff1a; 题目链接 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组…

Spring 是如何解决循环依赖的

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

tmpfs文件系统介绍

一、概述 tmpfs是一种基于内存的文件系统&#xff0c;它将一部分系统内存用作临时存储空间。在Linux系统中&#xff0c;tmpfs常用于挂载临时目录&#xff0c;如/run、/tmp和var等目录&#xff0c;用于存储临时文件、进程运行时数据和其他临时性数据。 tmpfs的优点&#xff1a;…

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

五、受限玻尔兹曼机&#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…

速盾cdn:ddos防护手段

速盾CDN采用多种手段来进行DDoS防护&#xff0c;以确保网络和网站的正常运行。以下是速盾CDN可能采用的一些主要DDoS防护手段&#xff1a; 实时监测和分析&#xff1a; 速盾CDN实时监测网络流量&#xff0c;通过分析流量模式来检测异常行为&#xff0c;以迅速发现潜在的DDoS攻击…