C语言中可变形参简单实例和简单的printf功能的实例
来源:互联网 发布:仿淘宝商城源码html 编辑:程序博客网 时间:2024/05/20 18:02
以下程序主要包括三个主要函数:
- 一个最简单的可变形参函数实例;
- 一个简单的printf功能的实例;
- 一个打印字符串函数(辅助);
其中myPrintf函数,实现了printf的部分简单功能,并没有去实现格式化输出操作(%2d %.2f 等),
因为只是它一个实例而已,目的是更好理解掌握可变参数。
后续有兴趣时,我会继续完善的。
/******************************************************************************************************* * 名 称: main.c * 功 能:C语言可变形参 variable arguments,典型案例是printf和scanf 实现了一个简单的可变参数函数例子 ShowArgs 实现了一个简单printf功能的函数 myPrintf * 描 述:可变参数的个数是不确定的 可变参数的类型是不确定的 printf和scanf在实现时,通过前面的%d %f 等获取可变参数的个数和类型 可变参数由定义在stdarg.h头文件中的宏:va_list va_start va_arg va_end等组成 va_list:用于保存参数列表 va_start(v,l):将参数列表的首地址 l 赋值给 v va_arg(v,l):获取参数列表中类型为 l 的参数的值,并将参数列表指针向后移动到下一个参数处 va_end(v):结束可变参数 * 作 者:JarvisChu * 时 间:2011-7-17 创建 ********************************************************************************************************/#include <stdio.h>#include <stdarg.h>#include <string.h>//在此处选择函数//#define SHOW_ARGS//#define MY_PRINTF#define SHOW_STRING_BY_CHAR//一个简单的实例,num代表可变参数的个数,类型全部默认为double型void ShowArgs(int num,...){ int i=0; double var; va_list ls; va_start (ls,num); //获取可变参数列表的首地址,赋值给ls printf("-----------%d个可变参数,如下:----------\n",num); while(i<num){ var = va_arg(ls,double);//返回类型为double的的可变参数值,并使ls指向下一个可变参数 printf("参数%d:%f\n",++i,var); } va_end(ls); //结束 printf("\n");}//实现类似printf的部分功能,利用putchar向屏幕输出字符void myPrintf(char* str,...){ int i, len; // int num = 0; //num为可变参数个数 char pre,cur; //前一个字符和当前的字符 va_list ls; va_start(ls,str); len = strlen(str); //获取字符串长度 pre = ' '; //初始化时,pre为空格(只要不是特殊字符或转义字符就行) for(i=0;i<len;i++){ cur = str[i]; switch(pre){ case '%': //前一个字符值是%字符,我们就要考虑%d %f 这种情况了 switch(cur){ case 'd': //%d,输出整数 printf("%d",va_arg(ls,int));//将可变部分的int类型变量替代%d输出,本来很不想在这里用printf的, break; //但是没有想到其他的办法向屏幕输出一个整型,姑且用printf吧 case 'f': //%f,输出float double类型 printf("%f",va_arg(ls,double)); break; case 'c': //%c,输出一个字符 putchar(cur); break; } break; default: //前一个字符不是什么特殊字符 if(cur != '%'){ //当前字符不是% putchar(cur); } break; } pre = cur; } va_end(ls);}//辅助函数:将一个字符串,一个字符一个字符的输出void ShowStringByChar(char* str){ int i, len; char ch; len = strlen(str); for(i=0;i<len;i++){ ch = str[i]; putchar(ch); printf("\n----\n"); }}int main(){#ifdef SHOW_ARGS ShowArgs(0); ShowArgs(1,1.1); ShowArgs(2,1.1,2.2);#endif#ifdef MY_PRINTF myPrintf("Jarvis"); myPrintf("\n"); //注意\n \t为一个字符,不要理解成了char[0] = '\' ; char[1] = 'n'; myPrintf("\n"); myPrintf("Jarvis\n"); myPrintf("Jarvis %d\n",22); myPrintf("Jarvis %d\t%d\n",22, 1990); myPrintf("Jarvis %d\t%d\t%f\n",22, 1990,63.2);#endif#ifdef SHOW_STRING_BY_CHAR ShowStringByChar("123\t456\n789%d");# endif return 0;}
- C语言中可变形参简单实例和简单的printf功能的实例
- 用可变形参实现简单的printf
- c语言文件的简单实例和说明
- C语言实现简单的socket实例
- c语言的二分查找简单实例
- c语言的冒泡排序简单实例
- C语言中控制printf的打印颜色实例…
- C语言概述-C语言的一个简单实例
- printf可变形参的陷阱
- printf可变形参的研究
- 简单的C语言socket实例(远程连接)
- 一个简单的 短码 实例 ( C语言 )
- c语言函数指针数组的简单实例
- 一个简单的串口实例(C语言实现)
- C语言以epoll方式实现的简单socket实例
- C语言结构体的简单使用实例
- C 语言中可变参数的用法(两个简单的小实例)
- C语言中控制printf的打印颜色实例及vt100的控制符文档
- 最近开发中遇到的一些怪事情
- 时间轴上 移出帧监听
- C语言的那些小秘密之指针(四)
- HTML DOM Button Object
- Vector使用
- C语言中可变形参简单实例和简单的printf功能的实例
- “设计模式”学习之一:工厂方法与抽象工厂
- 你的知识存储在大脑里还是存储在 Google 上?
- Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/s
- 玩转Android---组件篇---Service(服务)
- 程序开发基础学习二(C++ Google Style 命名规则)
- HTML Form Object
- apache portable runtime tutorial
- 解决Android requires compiler compliance level 5.0.错误