C和指针 var_list的使用与格式化

// max_List.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>

int get_max(int n_values, ...)
{
 va_list var_arg;
 int count = 0;
 int max = 0;

 va_start(var_arg, n_values);

 for(int i=0; i<n_values; i += 1)
 {
  int cur = va_arg(var_arg, int);
  if(cur > max)
   max = cur;
 }
 va_end(var_arg);
 return max;
}

//第一个参数表示数据的个数
void print_integer(int n_values, ...)
{
 va_list var_arg;
 va_start(var_arg, n_values);
 for(int i=0; i<n_values; i+=1)
 {
  printf("%d ",va_arg(var_arg, int));
 }
 va_end(var_arg);
}

//第一个参数表示数据的个数
void print_float(int n_values, ...)
{
 va_list var_arg;
 va_start(var_arg, n_values);
 for(int i=0; i<n_values; i+=1)
 {
  //在这里注意类型提升
  printf("%lf ",(float)va_arg(var_arg, double));
 }
 va_end(var_arg);
}

void pInt(int i)
{
 printf("%d", i);
}

void pFoat(double f)
{
 printf("%lf",(float)f);
}

void print_fmt(const char* fmt,...)
{
 va_list var_arg;
 va_start(var_arg, fmt);
 const char *p = NULL;
 const char *q = NULL;
 const char *temp =NULL;
 for(p=fmt; p<&fmt[strlen(fmt)]; p++)
 {
  if(*p == '%')
  {
   switch(*++p)
   {
   case 'c':
    putchar(va_arg(var_arg, char));
    break;
   case 's':
    for(temp=va_arg(var_arg,char*),q=temp; q<temp+strlen(temp); q++ )      
     putchar(*q);
    break;
   case 'd':
    pInt(va_arg(var_arg,int));
    break;
   case 'f':
    pFoat(va_arg(var_arg,double));
    break;
   }
  }
  if(*p == ' ')
   putchar(' ');
 }
 va_end(var_arg);
}


int _tmain(int argc, _TCHAR* argv[])
{
 int max = get_max(4,1,2,3,4);
 print_float(3,1.01,  2.0,  3.0);
 float f = 12.0;
 printf("\n\n\n\n");
 print_fmt("%d  %f",max,f);
 return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值