-1
bool ordered(int args, double num, ...)
{
    bool order = true;
    double holder1, holder2;
    va_list arguments;
    va_start(arguments, num);
    holder1 = va_arg(arguments, double);
    for(int x = 2; x < args + 1; x++)
    {
        if(x % 2 == 0)
        {
            holder2 = va_arg(arguments, double);
            if(holder1 > holder2)
                order = false;
        }
        else if(x % 2 != 0)
        {
            holder1 = va_arg(arguments, double);
            if(holder2 > holder1)
                order = false;
        }
    }
    va_end(arguments);
    return order;
}

该函数尝试确定数字是否按升序输入,但无论我传递什么,该函数都返回 false。

4

4 回答 4

0

更改此va_start(arguments, args);num从声明中删除,您正在处理不正确的双精度数,并最终在最后一个 arg 之后与垃圾进行比较。

于 2012-11-29T17:15:08.133 回答
0

有时从更简单的事情重新开始会更容易,我认为这就是我在这种情况下会做的事情。首先,我会稍微简化一下界面:

bool ordered(int args, ...) { // ...

然后我会简化代码:检索一个数字。如果它小于前一个,则返回 false。否则,将前一个设置为当前,并读取下一个数字。继续所有的数字。如果你掉出循环(即,你到达终点却没有看到一个乱序的数字)返回真。

于 2012-11-29T17:19:32.570 回答
0

评论中已经指出了一些问题(num例如被忽略的事实 - 请参阅chill的答案以获得解决方案),但如果修复这些问题并不能解决您的问题,那么您很可能不会传递浮点值(floatdouble)作为函数的参数。

如果您正在调用这样的函数(假设num问题已解决):

bool result = ordered(3, 1, 2, 3);

然后尝试这样调用它:

bool result = ordered(3, 1.0, 2.0, 3.0);
于 2012-11-29T17:23:32.217 回答
0

你的if(x % 2 == 0) 意思是返回true而不是false

if(x % 2 == 0)
        {
            holder2 = va_arg(arguments, double);
            if(holder1 > holder2)
                order = true;
        }
于 2012-11-29T19:42:09.727 回答