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

news2025/1/22 19:04:53

前言

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.coloradmin.cn/o/1344250.html

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

相关文章

Unity JSON编码解码之LitJson 深度剖析

把LitJson的代码库放入到项目中&#xff0c;如图所示:JSON在游戏开发中是一种序列化/反序列化常用的技术&#xff0c;把游戏相关的数据,如地图组成,通过JSON编码&#xff0c;序列化成JSON文本&#xff0c;传输或存储, 要使用的时候再通过JSON技术把文本解析成数据对象&#xff…

Word 将页面方向更改为横向或纵向

文章目录 更改整个文档的方向更改部分页面的方向方法1&#xff1a;方法2&#xff1a; 参考链接 更改整个文档的方向 选择“布局”>“方向”&#xff0c;选择“纵向”或“横向”。 更改部分页面的方向 需要达到下图结果&#xff1a; 方法1&#xff1a; 选:中你要在横向页面…

ThreadLocal为什么存在内存泄漏,源码分析

文章目录 1. ThreadLocal的使用场景2. 弱引用与内存泄露3. 源码分析①&#xff1a;ThreadLocalMap②&#xff1a;set操作③&#xff1a;get操作④&#xff1a;remove操作 4. 继承性 InheritableThreadLocal5. 各类ThreadLocal问题总结 1. ThreadLocal的使用场景 通常&#xff0…

计算机网络复习6

应用层 文章目录 应用层网络应用模型域名系统DNS文件传输协议FTP电子邮件万维网 网络应用模型 客户/服务器模型 客户/服务器&#xff08;Client/Server&#xff0c;C/S)模型中&#xff0c;有一个总是打开的主机称为服务器&#xff0c;它服务于许多来自其他称为客户机的主机请求…

SparkStreaming_window_sparksql_reids

1.5 window 滚动窗口滑动窗口 window操作就是窗口函数。Spark Streaming提供了滑动窗口操作的支持&#xff0c;从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据&#xff0c;会被聚合起来执行计算操作&#xff0c;然后生成的RDD&#xff0c;会…

Stable Diffusion WebUI安装合成面部说话插件SadTalker

SadTalker可以根据一张图片、一段音频&#xff0c;合成面部说这段语音的视频。图片需要真人或者接近真人。 安装ffmpeg 下载地址&#xff1a; https://www.gyan.dev/ffmpeg/builds/ 下载ffmpeg-git-full.7z 后解压&#xff0c;将解压后的目录\bin添加到环境变量的Path中。 在…

鸿蒙原生应用再添新丁!爱奇艺入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;爱奇艺 入局鸿蒙 来自 HarmonyOS 微博12月29日消息&#xff0c;#爱奇艺完成鸿蒙原生应用Beta版#作为中国头部在线视频平台&#xff0c;爱奇艺 完成鸿蒙原生应用Beta版&#xff0c;将以丰富的正版高清视频资源促进鸿蒙生态的进一步繁荣&#x…

python实现图像的二维傅里叶变换——冈萨雷斯数字图像处理

原理 二维傅里叶变换是一种在图像处理中常用的数学工具&#xff0c;它将图像从空间域&#xff08;我们通常看到的像素排列&#xff09;转换到频率域。这种变换揭示了图像的频率成分&#xff0c;有助于进行各种图像分析和处理&#xff0c;如滤波、图像增强、边缘检测等。 在数学…

YOLOv5算法进阶改进(10)— 更换主干网络之MobileViTv3 | 轻量化Backbone

前言:Hello大家好,我是小哥谈。MobileViTv3是一种改进的模型架构,用于图像分类任务。它是在MobileViTv1和MobileViTv2的基础上进行改进的,通过引入新的模块和优化网络结构来提高性能。本节课就给大家介绍一下如何在主干网络中引入MobileViTv3网络结构,希望大家学习之后能够…

Stable Diffusion WebUI制作光影文字效果

在huggingface上下载control_v1p_sd15_brightness模型。 将模型放在stable-diffusion-webui\extensions\sd-webui-controlnet\models目录下。 SD参数配置 正向提示词&#xff1a; city,Building,tall building,Neon Light, gentle light shines through, anime style, paint…

冒泡排序--------(C每日一题)

冒泡排序&#xff1a; 每次将相邻的两个数比较,将小的调到前头--升序 冒泡排序一个结论&#xff1a; n个数要进行n-1轮比较&#xff0c;第j轮要进行n-j次两两比较 循环体代码&#xff1a; int main() {int i, j,n,a[10],t;//n是几个数比较for(j1;j<n-1;j)//控制轮次for…

PNG免抠素材库,免费下载,可商用~

本期分享5个高质量PNG素材网站&#xff0c;让你在工作中大大提高效率&#xff0c;节省更多的时间&#xff0c;赶紧收藏起来吧~ 1、菜鸟图库 https://www.sucai999.com/searchlist/66008----all-0-1.html?vNTYxMjky 网站主要分享设计素材为主。像平面海报、免抠元素、背景图片…

英语打卡分析12

[爱心]长难句分享第十二天解析 [玫瑰]【词汇】&#xff1a; • appropriate [əˈproʊpriət] adj. 恰当的 • in place 准备妥当 • caregiver [ˈkerɡɪvər] n. 看护人 • no more … than… 和……一样不 • newsworthy [ˈnuːzwɜːri] adj. 值得报道的 • capable […

记一次应急响应练习(Linux)

记一次应急响应练习(Linux) Linux&#xff1a; 请提交攻击者的IP地址 答&#xff1a; 192.168.31.132 思路&#xff1a; 通过查看历史命令和开放的8080端口看到这台主机上运行的是Tomcat服务。并且在历史命令中看到了Tomcat的安装路径。那么就算是找到了日志的查看点了&#x…

SpringBoot3 核心技能

1. 常用注解 SpringBoot摒弃XML配置方式&#xff0c;改为全注解驱动 1. 组件注册 Configuration、SpringBootConfiguration Bean、Scope Controller、 Service、Repository、Component Import ComponentScan 步骤&#xff1a; 1、Configuration 编写一个配置类 2、在…

中科院1区TOP,Elsevier出版社,均1-2个月录用!检索超稳!

【SciencePub学术】本期&#xff0c;小编给大家推荐的是一本Elsevier旗下、工程技术领域、影响因子为6.0的中科院1区TOP。其详情如下&#xff1a; 期刊简介 TRIBOLOGY INTERNATIONAL ISSN&#xff1a;0301-679X E-ISSN&#xff1a;1879-2464 IF&#xff08;2022&#x…

Python生成器 (Generators in Python)

Generators in Python 文章目录 Generators in PythonIntroduction 导言贯穿全文的几句话为什么 Python 有生成器Generator&#xff1f;如何获得生成器Generator&#xff1f;1. 生成器表达式 Generator Expression2. 使用yield定义生成器Generator 更多Generator应用实例表示无…

深度优先和广度优先

文章目录 前言一、深度和广度的区别二、代码演示1.准备数据,构造树2.深度优先遍历3.广度优先遍历 总结 前言 深度优先和广度优先的区别&#xff1a; 搜索方式不同 。深度优先搜索算法不全部保留结点&#xff0c;扩展完的结点从数据库中弹出删去&#xff1b;广度优先搜索算法需…

隐身之术:深入解析代理模式的神秘力量

一、定义 代理模式&#xff08;Proxy Pattern)为其他对象提供一种代理以控制对这个对象的访问,属于结构型模式。 二、解决什么问题 主要解决在直接访问对象时带来的问题&#xff0c;比如说&#xff1a;要访问的对象在远程的机器上。在面向对象系统中&#xff0c;有些对象由于…

Python中matplotlib库的使用1

1 matplotlib库简介 matplotlib是一个数学绘图库&#xff0c;可以将数据通过图形的方式显示出来&#xff0c;也就是数据可视化。 2 matplotlib库的安装 2.1 打开cmd窗口 点击键盘的“Win”“R”键&#xff0c;在弹出的“运行”对话框的“打开”栏中输入“cmd”&#xff0c;…