C语言 可变参数列表
就是<stdarg.h>这个头文件里面的可变参数列表,不是很会用,编出来的程序总是错的,谁能给我讲讲那几个参数的用法? 这个东西用的地方多吗?
求几个数字的最大的一个,还是不对。。。。。
#include<stdio.h>
#include<stdarg.h>
float max_list(float number,...) ;
void main()
{
float a,b,c,d;
a = 3;
b = 4;
c = 5;
d = 6;
printf("%f",max_list(4,a,b,c,d));
getch();
}
float max_list(float number,...)
{
va_list var_arg;
int count;
float consequence = 0;
float m ;
va_start(var_arg,number);
/* for(count = 0 ; count < number;count+=1)
{
if((m=va_arg(var_arg,float))>=consequence)
consequence = m;
*/
while((m=va_arg(var_arg,float))>=0)
{
if(m>consequence)
consequence = m;
}
va_end(var_arg)
return consequence ;
}
追问:懂了,实验也成功了,先谢谢,能再问一下吗?为什么这里存在精度的问题?
答案:#include <stdio.h>
#include <stdarg.h>float max_list(int number...);
void main() {
float a = 3,b = 4,c = 5,d = 6;
printf("max = %.2lf\n\n",max_list(4,a,b,c,d));
getch();
}
float max_list(int number ...) {
va_list ap;
double num,consequence = 0;
va_start(ap,number); // 读出第一个数,并移动指针指向下一个数
printf("number = %d\n",number);
while(number--) {
num = va_arg(ap,double); // 浮点数全部用双精度类型读入,单精度读出的结果有误
printf("%8.2lf",num);
if(num > consequence) consequence = num;
}
printf("\n");
va_end(ap); // 将参数指针赋空值
return (float)consequence;
}
VC++ 6.0环境下调试、运行结果
下面的是我之前写的一个这个类型的使用例子。这个一般都是用来格式化字符串的。你可以先看下。
注意里面加粗了的那行注释!!
最后其实是把不确定的参数格式化后存储到了一个字符串数组中。
也就是,不管你输入的参数是什么,最后都变成了字符串了!!
你可以从字符串中提取出有用的信息再进行处理。
/***************************源文件说明性注释: 开始******************************
** Copyrigth (c) 2011,
** All rights reserved
**
** 文 件 名 : main.c
** 创建日期 : 2010-9-8 15:00:31
** 内容概述 : vsprintf函数使用演示
**
** 原始版本 : v1.0.0
** 作 者 :
** 完成日期 :
**
** 当前版本 :
** 作 者 :
** 完成日期 :
** 备 注 :
****************************源文件说明性注释: 结束*****************************/
/*********************************#include*************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
/*********************************#define**************************************/
/******************************函数定义注释头***********************************
** 函数名 : void Print(char* format, ...)
** 函数功能 : 打印输出指定格式的字符串
** 全局变量和结构 :
** 调用的主要函数 :
** 返回值说明 :
** 参数表 :
*******************************函数体定义**************************************/
void Print(char* format, ...)
{
va_list list;
char str[256]; // 字符串缓冲区,用来存储格式化后的字符串
va_start(list, format); //
vsprintf(str, format, list); // 对函数参数进行格式化,并将格式化后的结果存储到str缓冲区中
printf("%s", str); // 打印输出格式化后的字符串
va_end(list); //
}
/*******************************全局变量定义区*********************************/
/********************************函数体定义区**********************************/
/******************************函数定义注释头***********************************
** 函数名 : void main(void)
** 函数功能 :
** 全局变量和结构 :
** 调用的主要函数 :
** 返回值说明 :
** 参数表 :
*******************************函数体定义**************************************/
void main(void)
{
int a = 3;
float f = 1.2f;
double d = -3.3;
char* s = "String";
Print("%d %0.1f\t%0.3f %s\n",a, f, d, s);
}
/*********************************源文件结束***********************************/
while((m=va_arg(var_arg,double))>0)#include<stdio.h>
#include<stdarg.h>
#include <conio.h>
float max_list(float number,...) ;
void main()
{
float a,b,c,d;
a = 3;
b = 4;
c = 5;
d = 6;
printf("%f",max_list(4,a,b,c,d));
getch();
}
float max_list(float number,...)
{
va_list var_arg;
// float count;
float consequence = 0;
float m ;
va_start(var_arg,number);
/* for(count = 0 ; count < number;count+=1)
{
if((m=va_arg(var_arg,float))>=consequence)
consequence = m;
*/
while(number--)
{
m=va_arg(var_arg,double);
if(m>consequence)
consequence = m;
}
va_end(var_arg);
return consequence ;
}
float需要提升为double
上一个:用C语言编写程序
下一个:C语言的一个链表问题