gpt4 book ai didi

c++ - 根据值查找特定参数

转载 作者:行者123 更新时间:2023-11-28 01:44:43 25 4
gpt4 key购买 nike

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

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);
}

我会这样使用它:

int state = 0;

Toggle(0, state, 3, "Option 1", "Option 2", " Option 3");
printf("StateNum: %i\n", state);
Toggle(0, state, 3, "Option 1", "Option 2", " Option 3");
printf("StateNum: %i\n", state);
Toggle(0, state, 3, "Option 1", "Option 2", " Option 3");
printf("StateNum: %i\n", state);
Toggle(0, state, 3, "Option 1", "Option 2", " Option 3");
printf("StateNum: %i\n", 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_list 只是堆栈上的一组数据(在你的例子中是指针),你必须使用 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);
}

关于c++ - 根据值查找特定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45621417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com