有人可以弄清楚为什么以下函数总是返回false?

时间:2012-11-29 17:05:09

标签: c++ if-statement for-loop boolean

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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

评论中指出了一些问题(例如num被忽略的事实 - 请参阅chill对此的解决方案的答案),但如果解决这些问题并不能解决问题,那么你'最有可能不会将浮点值(floatdouble)作为参数传递给函数。

如果您正在调用此函数(假设num问题已修复):

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

然后尝试这样称呼它:

bool result = ordered(3, 1.0, 2.0, 3.0);

答案 3 :(得分:0)

此处if(x % 2 == 0)您的意思是返回true而不是false吗?

if(x % 2 == 0)
        {
            holder2 = va_arg(arguments, double);
            if(holder1 > holder2)
                order = true;
        }