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。
答案 0 :(得分:0)
更改为此va_start(arguments, args);
并从声明中删除num
,您正在处理不正确的双打数量,最后在最后一次arg之后与垃圾进行比较。
答案 1 :(得分:0)
有时候用简单的东西重新开始会更容易,我认为这就是我在这种情况下要做的事情。首先,我稍微简化了界面:
bool ordered(int args, ...) { // ...
然后我会简化代码:检索一个数字。如果它小于前一个,则返回false。否则,将前一个设置为当前,并读取下一个数字。继续所有数字。如果你不在循环中(即,你没有看到一个无序的数字到达终点),则返回true。
答案 2 :(得分:0)
评论中指出了一些问题(例如num
被忽略的事实 - 请参阅chill对此的解决方案的答案),但如果解决这些问题并不能解决问题,那么你'最有可能不会将浮点值(float
或double
)作为参数传递给函数。
如果您正在调用此函数(假设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;
}