【发布时间】:2017-06-08 04:00:44
【问题描述】:
我想编写一个函数 minimum 来返回在两次调用之间发送给它的最小值。该函数可以接收任意数量的参数,所有参数都是 0 到 100 范围内的整数。发送给函数的参数列表的末尾用 -1 表示。
例如,如果我在main 中输入了以下调用:
minimum (90,78,5,20,-1);
minimum (70,40,2,-1);
minimum(40,30,-1);
第一次调用将返回 5,因为 90,78,5,20 的最小值是 5。 第二次调用将返回 2,因为 5,70,40,2 的最小值是 2 第三次调用将返回 2,因为 2,40,30 的最小值是 2。
因此,函数minimum 返回迄今为止发生的所有调用中发送给它的最小数字。
所以我创建了一个名为min 的静态变量来保留函数调用之间的最小值。
这是我得到的:
#include <stdio.h>
#include <stdarg.h>
int minimum(int cnt, ...)
{
static int min;
int cur_min,i;
va_list lst;
va_start(lst,cnt);
cur_min = va_arg(lst,int);
min = cur_min;
printf("min is %d and cur min is %d \n", min, cur_min);
for(i=0; i<cnt; i++)
{
if(cur_min != -1)
{
if(cur_min < min)
{
min = cur_min;
}
cur_min = va_arg(lst,int);
printf("min is %d and cur min is %d \n" , min, cur_min);
}
else
break;
}
va_end(lst);
return min;
}
int main()
{
printf("In Call One: min is %d \n",minimum(90,78,5,20,-1));
printf("In Call Two: min is %d \n", minimum(70,40,2,-1) );
printf("In Call Three: min is %d \n", minimum(40,30,-1) );
return 0;
}
但我得到以下输出:
In Call Two: min is 2
In Call Three: min is 30
虽然输出应该是:
In Call Two: min is 2
In Call Three: min is 2
看起来虽然我已经使用 static 关键字声明了变量 min,但 min 在两次调用之间并没有保留其值。
为什么以及如何使min 在函数调用之间保持其值?
【问题讨论】:
-
请考虑正确格式化您的代码,并删除那些无用的空行。
标签: c variables static minimum retain