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

c语言不定参数

时间记录:2024/1/22

一、不定参数的函数定义和使用到的c函数

(1)定义

void fun1(参数类型 argName,...);
示例:
void fun1(int count,...);

(2)获取不定参数的值

#include <stdarg.h> //包含头文件va_list vaList;//定义结构体变量
va_start(vaList,count);//开始遍历不定参数
va_arg(vaList,type);//获取一个不定参数的值,type:int整数、double小数、char*字符串
va_end(vaList);//结束遍历

二、不定参数函数示例

(1)计算int类型数据总和,计算结果为8,argName的值不是使用va_arg函数获取的

#include <stdio.h>
#include <stdarg.h>int madd(const int argName,...);int main()
{printf("%d",madd(3,1,2,5));return 0;
}int madd(const int argName,...)
{int tempNum = 0;va_list vaList;va_start(vaList,argName);int i;for(i=0;i<argName;i++){tempNum += va_arg(vaList,int);}va_end(vaList);return tempNum;
}

(2)字符串格式化拼接,输出100-21.34%-testdfs

#include <stdio.h>
#include <stdarg.h>
#include <string.h>void mprintf(const char *format,...);int main()
{mprintf("%d-%.2f%-%sdfs\n",100,21.345,"test");return 0;
}void mprintf(const char *format,...)
{int fmtPos = 0;//原始字符串format的字符位置char tempStr[32];//拼接好不定参数的新字符串memset(tempStr,0,sizeof(tempStr));//清空数组int tempPos=0;//新字符串tempStr的字符位置va_list vaList;va_start(vaList,format);for(fmtPos=0;fmtPos<strlen(format);fmtPos++){//遍历原始字符串if(format[fmtPos] == '%' && format[fmtPos+1] == 'd'){//格式化输入整数sprintf(tempStr,"%s%d",tempStr,va_arg(vaList,int));tempPos = strlen(tempStr);fmtPos++;}else if(format[fmtPos] == '%' && format[fmtPos+1] == 's'){//格式化输入字符串sprintf(tempStr,"%s%s",tempStr,va_arg(vaList,char*));tempPos = strlen(tempStr);fmtPos++;}else if(format[fmtPos] == '%' && format[fmtPos+1] == 'f'){//格式化输入小数,小数点后全部保留sprintf(tempStr,"%s%lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos++;}else if(format[fmtPos] == '%' && format[fmtPos+1] == '.' && format[fmtPos+3] == 'f'){//格式化输入小数,小数后进行保留指定位switch(format[fmtPos+2]){//默认6位,选择1-5位保留case '1':sprintf(tempStr,"%s%.1lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;case '2':sprintf(tempStr,"%s%.2lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;case '3':sprintf(tempStr,"%s%.3lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;case '4':sprintf(tempStr,"%s%.4lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;case '5':sprintf(tempStr,"%s%.5lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;default:sprintf(tempStr,"%s%lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;}}else{tempStr[tempPos] = format[fmtPos];tempPos++;}}va_end(vaList);printf("%s",tempStr);return;
}

相关文章:

  • html+css+javascript实现贪吃蛇游戏
  • C++高级编程——STL:list容器、set容器和map容器
  • Pytest基础
  • [pytorch入门] 6. 神经网络
  • 小程序样例3:根据日历创建待办事项
  • 数灵通丨可以实现抖音引流微信小程序了
  • 腾讯云短信开发
  • css中>>>、/deep/、::v-deep的作用和区别,element-ui自定义样式
  • Docker搭建私有仓库
  • java spring cloud 企业工程管理系统源码+二次开发+定制化服务
  • 【单例模式】保证线程安全实现单例模式
  • 决策树(Python)
  • [第二章—Spring MVC的高级技术] 2.3 处理异常
  • 算法训练营第五十七天|647. 回文子串 516.最长回文子序列
  • 252.【2023年华为OD机试真题(C卷)】局域网中的服务器个数(优先搜索(DFS)-JavaPythonC++JS实现)
  • JS 中的深拷贝与浅拷贝
  • [译]如何构建服务器端web组件,为何要构建?
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 03Go 类型总结
  • CSS魔法堂:Absolute Positioning就这个样
  • Facebook AccountKit 接入的坑点
  • Java多态
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • leetcode98. Validate Binary Search Tree
  • Rancher如何对接Ceph-RBD块存储
  • Solarized Scheme
  • Spark RDD学习: aggregate函数
  • 初识 beanstalkd
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 机器学习学习笔记一
  • 警报:线上事故之CountDownLatch的威力
  • 判断客户端类型,Android,iOS,PC
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深入 Nginx 之配置篇
  • 微信小程序设置上一页数据
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​批处理文件中的errorlevel用法
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #NOIP 2014# day.1 T2 联合权值
  • #数学建模# 线性规划问题的Matlab求解
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • ()、[]、{}、(())、[[]]命令替换
  • (007)XHTML文档之标题——h1~h6
  • (2020)Java后端开发----(面试题和笔试题)
  • (4)Elastix图像配准:3D图像
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (JS基础)String 类型
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (第一天)包装对象、作用域、创建对象
  • (动态规划)5. 最长回文子串 java解决
  • (二)丶RabbitMQ的六大核心