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;
}

 

發佈了160 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章