当前位置: 首页 > 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 依赖项。我们将探讨此依赖项所提供…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...