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

C语言从头学66—学习头文件 <stdio.h>(二)

       关于可变参数,我们曾经在《C语言从头学27》中接触过,下面学习能够接收可变参数作为
参数的几个函数。
一、printf函数的能够接收可变参数的变体函数:
 1、函数vprintf()
      功能:按照给定格式,将可变参数中的内容输出到控制台(显示器)
      使用格式:vprintf (参1,参2);
         参1:格式字符串
         参2:可变参数变量(对象)
      返回值:返回值输出的字符数;出错返回负值。
      说明:vprintf()函数可以可以接收va_list对象作为自己的参数,而va_list对象只有在自定义可变参数函数中才能用到,因此vprintf()必须结合自定义可变参数函数才能正常使用;它通过va_list对象对可变函数中的"..."代表的内容进行处理。vprintf()函数不能像printf()那样直接使用。(具体见后边案例)
 2、函数vfprintf()
      功能:按照给定格式,将可变参数中的内容输出到文件
      使用格式:vfprintf(参1,参2,参3);
          参1:文件指针
          参2:格式字符串
          参3:可变参数变量(对象)
      返回值:返回输出的字符数;出错返回负值。
      说明:vfprintf()除了将可变参数内容写入文件不同于上一个函数外,其它方面同1的说明。
 3、函数vsprintf()
      功能:按照给定格式,将可变参数中的内容输出到字符串
      使用格式:vsprintf();
         参1:字符串指针
         参2:格式字符串
         参3:可变参数变量(对象)
     返回值:返回输出的字符数;出错返回负值。
     说明:具体参照1的说明。
二、scanf函数的能够接收可变参数的变体函数:
 1、vscanf()
      功能:按照格式字符串给定格式从键盘读取输入值。
      使用格式:vscanf(参1, 参2);
         参1:格式字符串
         参2:可变参数变量(对象)
      返回值:返回成功读取的项数;遇到文件结尾或发生错误返回-1。
 2、vfscanf()
      功能:按照格式字符串给定格式,从文件读取内容
      使用格式:vfscanf(参1,参2,参3);
         参1:文件指针
         参2:格式字符串
         参3:可变参数变量(对象)
 3、vsscanf()
      功能:按照格式字符串给定格式从字符串读取内容
      使用格式:vsscanf(参1,参2,参3);
         参1:字符串指针
         参2:格式字符串
         参3:可变参数变量(对象)
      说明:a. 这三个函数的使用方法与前面的三个函数很相似,具体可见后边的举例程序;b. 可变参数用于存放读取到的内容,为保证退出函数时值还在参数要用引用方式。
三、举例程序

#include<stdio.h>
#include <stdarg.h>//使用可变参数需用
int myPrintf(char* fmt, ...)
{va_list va; //声明一个可变参数对象va_start(va, fmt); //初始化可变参数对象(通过fmt定位找到“...”)int ret = vprintf(fmt, va); //将va作为参数传入vprintf函数va_end(va); //注销vaprintf("\n");return ret; //ret不为负值表示正常显示
}
int myString(char* mystring,char* fmt, ...)
{va_list va;va_start(va, fmt);int ret = vsprintf(mystring, fmt, va);va_end(va);return ret;
}
int myScanf(char* string, char* fmt, ...)
{va_list va;va_start(va, fmt);int ret = vsscanf(string, fmt, va);va_end(va);return ret;
}
int main(void)
{
//实验函数vprintf()char* fmt = "字符串s:%s包含%d个字符";char* s = "abcdef";int len = strlen(s);int ret=myPrintf(fmt, s, len);//运行结果:字符串s:abcdef包含6个字符//分析:上面的使用场景与使用printf相似,如果把上面三个参数给printf()会得到一样的结果。if (ret >= 0)printf("vprintf()函数调用正常,输出字符%d个\n",ret);//运行结果:vprintf()函数调用正常,输出字符26个
//实验函数vsprintf()char ch[1024] = { 0 };fmt = "%s%s%s";char* s1 = "天津市";char* s2 = "南开区";char* s3 = "位于天津的西南部。";ret = myString(ch, fmt, s1, s2, s3);if (ret >= 0)printf("vsprintf()函数调用正常,写入字符%d个\n", ret);//运行结果:vsprintf()函数调用正常,写入字符30个printf("%s\n", ch);//运行结果:天津市南开区位于天津的西南部。//分析:myString函数将三个字符串连成一个字符串,当然也可以将数字等其他类型连成(转成)字符串。
//实验函数vsscanf()s1 = "abcd1234e"; //读取后字母放一起,数字放一起char a[1024] = { 0 };int b;ret = myScanf(s1, "%c%c%c%c%d%c", &a[0], &a[1], &a[2], &a[3], &b, &a[4]);printf("a=%s\n", a);//运行结果:a = abcdeprintf("b=%d\n", b);//运行结果:b = 1234printf("共读取项数为:%d\n", ret);//运行结果:共读取项数为:6getchar();return 0;
}

相关文章:

C语言从头学66—学习头文件 <stdio.h>(二)

关于可变参数&#xff0c;我们曾经在《C语言从头学27》中接触过&#xff0c;下面学习能够接收可变参数作为 参数的几个函数。 一、printf函数的能够接收可变参数的变体函数&#xff1a; 1、函数vprintf() 功能&#xff1a;按照给定格式&#xff0c;将可变参数中的内容输…...

python静默活体检测接口集成-人脸识别API-人脸认证

静默活体检测是一种不需要用户主动配合&#xff08;如眨眼、点头等&#xff09;的活体检测技术&#xff0c;通常通过摄像头采集用户的人脸图像&#xff0c;结合计算机视觉与AI算法来判断用户是否为真人。这项技术被广泛应用于身份验证、金融交易安全、智能门禁等领域。 确定接口…...

Ubuntu安装nvidia显卡驱动

一、安装依赖 1、更新 sudo apt update sudo apt upgrade -y 2、基础工具 sudo apt install -y build-essential cmake 图形界面相关 sudo apt install -y lightdm 注:在弹出对话框选择"lightdm" 下载nvidia驱动&#xff1a; 进入如下网址&#xff1a;http…...

vulnhub-Web Developer 1靶机

vulnhub&#xff1a;Web Developer: 1 ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.114.129&#xff0c;扫描端口 有网站服务&#xff0c;访问 没什么东西&#xff0c;扫目录 真不少&#xff0c;访问一下&#xff0c;也只是一些普通的Wordpr…...

安全帽头盔检测数据集 3类 12000张 安全帽数据集 voc yolo

安全帽头盔检测数据集 3类 12000张 安全帽数据集 voc yolo 安全帽头盔检测数据集介绍 数据集名称 安全帽头盔检测数据集 (Safety Helmet and Person Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型&#xff08;包括YOLOv5、YOLOv6、YOLOv7…...

保姆级教程 | Adobe Illustrator调整颜色透明度

背景 由于课题需要&#xff0c;现需要在Adobe Illustrator里修改部分色块的颜色及透明度 步骤 1. 打开Adobe Illustrator软件&#xff0c;打开或创建一个AI文件&#xff1a; 2. 绘制一个色块&#xff1a; 3. 单击需要调整透明度的对象将其选中 4. 调整颜色的透明度&#xf…...

深入解读DeepSort目标跟踪算法:从状态预测到运动模型

在目标跟踪领域中&#xff0c;DeepSort&#xff08;Deep Simple Online and Realtime Tracking&#xff09;是一种广泛应用且高效的跟踪算法&#xff0c;它结合了深度学习与经典目标跟踪方法&#xff0c;为视觉跟踪任务提供了强大的解决方案。本文将深入探讨DeepSort中的关键概…...

24-10-2-读书笔记(二十二)-《契诃夫文集》(一)上([俄] 契诃夫 [译] 汝龙)啊!真想生活。

文章目录 《契诃夫文集》&#xff08;一&#xff09;上&#xff08;[俄] 契诃夫 [译] 汝龙 &#xff09;早期生活——塔甘罗格&#xff08;人物家庭简介&#xff09;学生时期——莫斯科&#xff08;写作与学习&#xff09;流浪时期——哈萨林&#xff08;游历与流浪&#xff09…...

【2024】前端学习笔记14-JavaScript常用数据类型-变量常量

学习笔记 1.JavaScript常用数据类型1.1.Number&#xff08;数字&#xff09;1.2.String&#xff08;字符串&#xff09;1.3.Boolean&#xff08;布尔值&#xff09;1.4.Null&#xff08;空值&#xff09;1.5.Undefined&#xff08;未定义&#xff09;1.6.Object&#xff08;对象…...

Leecode热题100-48.旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出…...

重学SpringBoot3-集成Redis(二)之注解驱动

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;二&#xff09;之注解驱动 1. 为什么选择 Redis 作为缓存&#xff1f;2. 如何在 Spring Boot 中启用 Redis 缓存&#xff1f;2.1 …...

【React】入门Day04 —— 项目搭建及登录与表单校验、token 管理、路由鉴权实现

项目搭建 创建项目 # 使用npx创建项目 npx create-react-app my-react-app # 进入项目目录 cd my-react-app # 创建项目目录结构 mkdir -p src/{apis,assets,components,pages,store,utils} touch src/{App.js,index.css,index.js} 使用npx create-react-app创建项目&#xff0…...

CMake 属性之目录属性

【写在前面】 CMake 的目录属性是指在特定目录&#xff08;及其子目录&#xff09;范围内有效的设置。 这些属性不同于全局变量或目标&#xff08;Target&#xff09;属性&#xff0c;它们提供了一种机制&#xff0c;允许开发者为项目中的不同部分定义不同的构建行为。 通过目录…...

ChatGPT:引领人工智能新潮流!

一、ChatGPT 是什么&#xff1f; 1. ChatGPT 的强大功能和广泛应用。 ChatGPT 作为一款先进的 AI 语言模型&#xff0c;拥有众多强大功能。它可以进行文本生成、文本分类、情感分析、机器翻译等多种自然语言处理任务。同时&#xff0c;ChatGPT 还能进行对话式交互&#xff0c;…...

【银河麒麟高级服务器操作系统】安全配置基线相关分析全过程及解决方案

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 服务器环境以及配置 【机型】物理机或虚机 【…...

用Python实现图片转ASCII艺术:图像处理与字符艺术的完美结合

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 ASCII艺术是一种通过字符来表现图像的艺术形式,最早用于早期计算机显示器,它仅支持字符显示。如今,尽管图像分辨率和显示技术得到了极大的提升,ASCII艺术作为一种复古而别具一格的图像表现形式,仍然受到许多…...

大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

Redis-缓存过期淘汰策略

缓存淘汰策略 生产上redis内存设置为多少 设置为最大内存的 3/4 redis 会占用物理机多少内存 默认大小是 0&#xff0c;64 位系统下表示不限制内存大小&#xff0c;32位系统表示 3G 如何设置修改redis内存大小 config get maxmemory 查看修改方式 配置文件 单位是字节 2.…...

如何设置LED电子显示屏的屏幕参数?

LED电子显示屏因其高亮度、低能耗和长寿命等优点&#xff0c;在广告、信息显示等领域得到了广泛应用。正确设置屏幕参数对于确保显示屏的最佳性能至关重要。以下是LED电子显示屏设置屏幕参数的步骤&#xff1a; 1. 确定屏幕参数 在开始设置之前&#xff0c;需要了解显示屏的基本…...

Spring Boot Starter Parent介绍

引言 spring-boot-starter-parent 是一个特殊的项目&#xff0c;为基于 Spring Boot 的应用程序提供默认配置和默认依赖。 在本 Spring Boot 教程中&#xff0c;我们将深入了解所有 Spring Boot 项目内部使用的 spring-boot-starter-parent 依赖项。我们将探讨此依赖项所提供…...

【含开题报告+文档+PPT+源码】基于SpringBoot乡村助农益农平台的设计与实现

开题报告 近年来&#xff0c;随着社会经济的快速发展和人民生活水平的提高&#xff0c;人们对优质农产品的需求越来越高。然而&#xff0c;传统的农产品销售管理模式存在一些问题。首先&#xff0c;农产品供应链信息不透明&#xff0c;导致生产者难以了解市场需求和价格变动趋…...

数据中心运维挑战:性能监控的困境与智能化解决方案的探寻

随着数字化进程的加速&#xff0c;数据中心已成为企业信息架构的核心支撑&#xff0c;其运维管理的复杂度和重要性也随之提升。运维团队需应对设备老化、资源分配失衡、性能波动等多重难题&#xff0c;以确保数据中心持续高效运行。 其中&#xff0c;性能监控作为运维管理的关键…...

基于SSM的民宿管理系统【附源码】

基于SSM的民宿管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1用户信息管理 5.2 房东信息管理…...

显卡 3090 vs v100

1.3090 Date: 2020 AmperePielines/ Cuda cores: 10496 2.V100 Date: 2018 VoltaPielines/ Cuda cores: 5129 3.结构 & Core比较: v100优点: v100功耗小v100较快的双精度(fp64)和混合精度(fp16fp32)pcie版的NVLink与2080ti完全一致 v100缺点: 不支持整数格式计算&…...

怎么在单片机裸机程序中移植EasyLogger?

1、介绍 EasyLogger 是一款超轻量级、高性能的C日志库&#xff0c;非常适合对资源敏感的软件项目。例如&#xff1a;IoT产品、可穿戴设备、智能家居等等。相比log4c、zlog这些知名的C日志库&#xff0c;EasyLogger的功能更加简单&#xff0c;提供给用户的接口更少&#xff0c;但…...

C/C++解析文件名和目录路径

文章目录 主要函数使用注意事项示例程序总结 #include <libgen.h> 是一个 C/C 语言的头文件&#xff0c;主要用于字符串处理&#xff0c;特别是在处理文件路径时。它提供了一些函数来帮助你解析文件名和目录路径。 主要函数 以下是 libgen.h 中一些常见的函数&#xff…...

Git 基本命令行操作

Git是一个开源的分布式版本控制系统&#xff0c;用于管理源代码和文档的版本。以下是Git的基本命令行操作&#xff1a; 一、配置 安装完成后&#xff0c;需要配置Git的用户名和邮箱&#xff0c;以便在提交记录时记录操作者的信息。 配置全局用户名&#xff1a;git config --g…...

【Rust练习】17.泛型

练习题来自&#xff1a;https://practice-zh.course.rs/generics-traits/generics.html 函数 1 // 填空 struct A; // 具体的类型 A. struct S(A); // 具体的类型 S. struct SGen<T>(T); // 泛型 SGen.fn reg_fn(_s: S) {}fn gen_spec_t(_s: SGen<A&…...

java脚手架系列4--测试用例、拦截器

异常处理、拦截器、数据库连接 1 测试用例 单元测试是一个老生常谈的问题&#xff0c;无论是后端对自己的代码质量把的第一道关也好&#xff0c;也是对测试减缓压力。这里就不过多讲述测试用例的重要性&#xff0c;但是有2个框架我们必须了解一下。 1.1 JUnit和mockito 我们…...

论文推荐 |【Agent】自动化Agent设计系统

论文标题&#xff1a; Automated Design of Agentic Systems 论文地址&#xff1a; https://arxiv.org/abs/2408.08435 GitHub地址&#xff1a; https://github.com/ShengranHu/ADAS 自动化代理设计在性能和通用性方面显著超越了手动方法。 • 引入了自动化代理系统设计&am…...