C++ 根据值查找特定参数

C++ 根据值查找特定参数,c++,C++,我目前正在尝试创建一个切换系统,在这里我有一堆可能的选项和一个值,我输入所有这些可能的选项作为参数,然后得到所需的一个。这就是我迄今为止所尝试的: void Toggle(int scroll, int &state, int maxV, ...) { state++; if (state >= maxV) state = 0; char *char_State = ""; va_list argptr; va_star

我目前正在尝试创建一个切换系统,在这里我有一堆可能的选项和一个值,我输入所有这些可能的选项作为参数,然后得到所需的一个。这就是我迄今为止所尝试的:

void Toggle(int scroll, int &state, int maxV, ...)
{
    state++;
    if (state >= maxV)
        state = 0;

    char *char_State = "";

    va_list argptr;

    va_start(argptr, maxV);

    for (int i = 0; i < maxV; i++)
    {
        if (i == state)
            char_State = va_arg(argptr, char*);
    }

    va_end(argptr);

    printf("State: %s\n", char_State);
}
但由于某种原因,在运行上面的代码时,我得到了以下结果:

State: Option 1  
StateNum: 1  
State: Option 1  
StateNum: 2  
State: Option 1  
StateNum: 0  
State: Option 1  
StateNum: 1
知道我做错了什么吗?由于这是我第一次与va合作,因此非常感谢您的帮助

每次输入
toggle()
时,应为所有3个参数调用
va_arg()
,或至少为每个选项调用,直到找到正确的选项为止。这是因为在内部,va_列表只是堆栈上的一个数据数组(在您的例子中是指针),您必须使用va_arg检查它们,直到找到所需的数据

void Toggle(int scroll, int &state, int maxV, ...)
{
    state++;
    if (state >= maxV)
        state = 0;

    char *char_State = "";

    va_list argptr;

    va_start(argptr, maxV);

    for (int i = 0; i < maxV; i++)
    {
        char* p = va_arg(argptr, char*);
        if (i == state)
            char_State = p;
    }

    va_end(argptr);

    printf("State: %s\n", char_State);
}
void切换(int-scroll、int&state、int-maxV等)
{
状态++;
如果(状态>=maxV)
状态=0;
char*char_State=“”;
va_列表参数;
va_启动(argptr,maxV);
对于(int i=0;itoggle()
时,应为所有3个参数调用
va_arg()
,或至少为每个选项调用,直到找到正确的选项为止。这是因为在内部,va_列表只是堆栈上的一个数据数组(在您的例子中是指针),您必须使用va_arg检查它们,直到找到所需的数据

void Toggle(int scroll, int &state, int maxV, ...)
{
    state++;
    if (state >= maxV)
        state = 0;

    char *char_State = "";

    va_list argptr;

    va_start(argptr, maxV);

    for (int i = 0; i < maxV; i++)
    {
        char* p = va_arg(argptr, char*);
        if (i == state)
            char_State = p;
    }

    va_end(argptr);

    printf("State: %s\n", char_State);
}
void切换(int-scroll、int&state、int-maxV等)
{
状态++;
如果(状态>=maxV)
状态=0;
char*char_State=“”;
va_列表参数;
va_启动(argptr,maxV);
对于(int i=0;i