2017-08-10 4 views
0

私は現在トグルシステムを作成しようとしています。ここではバンチ可能なオプションと値があります。これらすべてのオプションをパラメータとして入力し、必要なものを取得します。それは私がこれまで試したものです:値に応じて特定のパラメータを見つける

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 

私は何が間違っていると思いますか?これは私の最初の時間ですので、何か助けがありがとうございました!

答えて

2

va_arg()は、toggle()と入力するたびに、または正しいものが見つかるまで少なくともすべてのオプションに3つの引数すべてを呼び出す必要があります。これは、内部的には、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); 
} 
関連する問題