gpt4 book ai didi

C可变参数

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:56 25 4
gpt4 key购买 nike

我有这个作业要做:“使用参数数量可变的函数从字符串(隐式值或 KB)中确定 10 个精度 double 的最小值。最初将考虑前 7 个值,接下来最后 3 个和最后这 2 个值。”好吧,我做到了,但我不知道为什么它会给我一些奇怪的结果。这是代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <conio.h>
double min(double,...);

void main(){
double a,b,c;
printf("Introduceti numerele: ");
scanf("%lf%lf%lf",&a,&b,&c);
printf("\nMinimul este %lf",min(10,1.34,4.34,7,5.23,6.23,2,8.232,a,b,c));
_getch();
}

double min(double x,...){
int i;
double y;
va_list ap;
va_start(ap,x);
y=va_arg(ap,double);
for(i=0;i<x;i++){
if(y>va_arg(ap,double))
y=va_arg(ap,double);
}
va_end(ap);
return y;
}

我也不知道为什么编译器知道下一个参数是什么,因为 va_arg(ap,double) 中没有使用 i。

for(i=0;i<x;i++){
if(y>va_arg(ap,double))
y=va_arg(ap,double);

最佳答案

函数 min 调用中的第一个参数是参数的数量,它的类型为 int:

#include <stdarg.h>

double min( int numberOfArgs, ... )
// ^^^
{
va_list argptr;
va_start( argptr, numberOfArgs ); // initialize argument pointer

double minData = va_arg( argptr, double ); // initialize the minimum with the first argument
// and increment argument pointer
for ( int i = 1; i < numberOfArgs; i ++ ) // for all of the following arguments
{
double data = va_arg( argptr, double ); // get argument and increment argument pointer
if ( data < minData ) // test if argument is less than mnimum
minData = data;
}
va_end( argptr );

return minData;
}

确保参数列表中的所有参数都是 double 类型的浮点值:

int main()
{
double a, b, c;
printf("Introduceti numerele: ");
scanf_s("%lf%lf%lf", &a, &b, &c);

double minVal = min( 10, 1.34, 4.34, 7.0, 5.23, 6.23, 2.0, 8.232, a, b, c)
// ^^ ^^
printf("\nMinimul este %lf", minVal);
return 0;
}

关于C可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35828564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com