首页 > 解决方案 > 可变函数-升序

问题描述

写一个升序函数(int n, char type, ...),接收n个值,严格升序返回1,否则返回0。类型字符表示值的类型,可以be 'd' - 你,'in' - 双倍。这是我的尝试,但我有点卡住了。

double asc(int n,char tip,...)
{
    va_list va;
    va_start(va,tip);
    va_list var;
    va_start(va,tip);
    while(--n)
    {
        if(tip=='d')
        {
            int va1=va_arg(va,int);
            if( va>va1)
                return 1;
            else
                return 0;
        } 
        else
            if(tip=='f')
            {
                double va2=va_arg(va,double);
                if(va>va2)
                return 1;
            else
                return 0;
            }
    }
    return 0;

}
int main(int argc, char const *argv[])
{
    asc(3,'d',-1,7,9);
    return 0;
}

标签: cvariadic-functions

解决方案


int asc(int n,char tip,...)
{
    va_list va;
    va_start(va,tip);  
    int result = 1;
    union 
    {
        int i;
        double d;
    }val1, val2;
    if (n >= 2)
    {
        for(int i = 0; i < n-1; i++)
        {
            switch(tip)
            {
                case 'i':
                    if(!i) {val1.i = va_arg(va, int);}
                    val2.i = va_arg(va, int);
                    if( val1.i > val2.i)
                        {result = 0; goto function_return;}
                    val1.i = val2.i;
                    break;
                case 'd':
                    if(!i) {val1.d = va_arg(va, double);}
                    val2.d = va_arg(va, double);
                    if( val1.d > val2.d)
                        {result = 0; goto function_return;}
                    val1.d = val2.d;
                    break;
                default:
                    break;
            }
        }
    }
    function_return:
    va_end(va);
    return result;

}
int main(int argc, char const *argv[])
{
    printf("%d\n", asc(4,'d',-1.0,7.0,9.0,0.0));
    return 0;
}

推荐阅读