2016-11-07 11 views
1

どこでも見つかりませんでした...C - 既に使用されているユーザーを無効にする

私の大学でプロジェクトを作っています。私はいくつかの質問/可能性をユーザーが作ることができます...それを使用した後、私はそれを無効にし、ユーザーが別の "while"ループに進むことができるように表示されません。

例:

while (something == true) 
{ 
printf("Your possibilities are:\n 1 - Use a hammer\n 2 - Use a pipe\n 3 - Use a chair\n"); 

choice = getchar(); 

switch (choice) 
{ 
    case '1': 
    someCode(); 
    break; 
    case '2': 
    someCode(); 
    break; 
    case '3': 
    someCode(); 
    break; 
}} 

これはもちろん一例です。問題は、ユーザーがハンマーを使用した後に、いくつかのコードが実行され、次に - 「パイプ」と「椅子」の2つの可能性だけが欲しいということです。次のチャンスは "双方向"スイッチに過ぎません。私のコードでは、6つの可能性があり、すべての選択肢に対してブールを作り、if-elseに6つのブールを組み合わせて、それぞれの可能性について書き換えを行うことは考えられない。

解決方法はありますか?適切には、すべての可能性(それが使用されている場合)に対してbool変数が必要ですが、何らかの方法でそのスイッチを定義する必要があります。

ありがとうございます!

+0

に従います。 3つのハードコードされたオプションを持つ代わりに、何らかの種類のデータ構造にすべてを格納する必要がある場合は、どのようにプログラムを記述しますか? (例えば、オプションがファイルに保存されていて、その数が事前に分からなかった場合) – Hurkyl

+2

は、一連の質問と「既に尋ねられた」boolの配列を持っています – pm100

+0

?例えば、ユーザーが次にパイプ(2番)を使用すると、それは消え、椅子は2番になります。それは私が苦労するものです。 – Stepan

答えて

0

使用されたアイテムを追跡するために、アイテムのリストとパラレルフラグのセットを作成します。
いくつかの擬似コードは「難しい」問題が解決しやすくなり、時には

#include <stdint.h> 
#include <stdbool.h> 

const char *item[] = 
    { "a hammer", "a pipe", "a chair", "an awl", "an hour", 0 }; 
#define ITEM_N (sizeof item/sizeof item[0] - 1) 

// return EOF on end-of-file/input error 
// return 0 when no choices 
// return 0 when non-numeric data entered 
// return 0 when 0 or too high a value entered 
// return 0 when a used value is selected 
int Choice(bool *Used) { 
    int choice = -1; 
    puts("Your possibilities are:"); 
    for (int i = 0; item[i]; i++) { 
    if (test_if_value_i_has_not_been_used) { 
     print_prompt; 
     choice = 0; 
    } 
    } 
    if (choice < 0) { 
    puts(" None"); 
    return 0; 
    } 
    char buf[50]; 
    read_user_input_into(buf); // return EOF if no input 
    if (!an_int_was_entered(&choice)) return 0; 
    if (choice_in_range) return 0; 
    if (was_choice_used_before) return 0; 
    Used[choice - 1] = true; 
    return choice; 
} 

int main(void) { 
    bool Used[ITEM_N] = { 0 }; // clear all flags 
    while (Choice(Used)) 
    ; 
    return 0; 
} 
関連する問題