C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)

来源:互联网 发布:网络兼职客服招聘 编辑:程序博客网 时间:2024/05/09 14:14

1、问题

 *简化printf函数,能够处理%d, %f, %c, %s格式码,假设已经存在
 *print_integer和print_float函数,另外2个类型用put char来打印
思路:
void va_start(va_list ap, last);// 取第一个可变参数的指针给ap,// last是函数声明中的最后一个固定参数(比如printf函数原型中的*fromat);type va_arg(va_list ap, type);// 返回当前ap指向的可变参数的值,然后ap指向下一个可变参数;// type表示当前可变参数的类型(支持的类型位int和double);void va_end(va_list ap);// 将ap置为NULL





2、代码实现

#include <stdio.h>#include <stdarg.h>/** * 简化printf函数,能够处理%d, %f, %c, %s格式码,假设已经存在 * print_integer和print_float函数,另外2个类型用putchar来打印 */void print_integer(int value){     printf("%d", value);}void print_float(float value){     printf("%.1f", value);}void my_printf(char *string, ...){     va_list arg;     //初始化     va_start(arg, string);     char *str1 = string;     char *str2;     while (*str1 != '\0')     {          //输出普通字符          if (*str1 != '%')          {              putchar(*str1++);              continue;          }          switch (*(str1 + 1))          {              case 'd':                   print_integer(va_arg(arg, int));                   str1 += 2;                   break;              case 'f':                   print_float(va_arg(arg, double));                   str1 += 2;                   break;              case 'c':                   putchar(va_arg(arg, int));                   str1 += 2;                   break;             case 's':                   str2 = va_arg(arg, char *);                   while (*str2 != '\0')                        putchar(*str2++);                   str1 += 2;                   break;             default:                   str1 += 2;                   break;          }     }}int main(){    int a = 5;    float b = 4.3;    char c = 'c';    char *s = "chenyu";    my_printf("my_printf a is %d and b is %f and c is %c and d is %s", a, b, c, s);    return 0;}






3、运行结果

1111deMacBook-Pro:dabian a1111$ vim my_printf.c1111deMacBook-Pro:dabian a1111$ gcc -g my_printf.c -o my_printf1111deMacBook-Pro:dabian a1111$ ./my_printfmy_printf a is 5 and b is 4.3 and c is c and d is chenyu




阅读全文
0 0