-1

こんにちは、私は明らかに C の初心者ですが、自分がやりたいことの背後にあるロジックに関するヘルプやアドバイスを探しています。というわけで、一連の質問を作成し、それをループ処理して、質問を 1 つずつ出力したいと思います。問題は、1 つの質問が出力された後、プログラムまたは関数が "Y" または "N" で応答されるまで待機し、その後ループが続くことです。すべての質問に回答すると、結果が出力され、プログラムが終了します。

このようなものの背後にあるロジックについてアドバイスが必要です。おそらく、この例でのループの使用は実現不可能であり、別のことを試す必要があります。アドバイスをいただければ幸いです!

4

1 に答える 1

0

さて、これは考えられる多数のオプションの1つです(Cを要求したので、ここにCコードがあります。C++では、これはまったく異なる方法で実行できたはずです):

  1. おそらく次のように、質問を保持するための構造を定義する必要があります。

    #define QUESTION_SZ 128 /* adjust to your needs, or use dynamic memory allocation */
    #define ANSWER_SZ 128 /* ditto */
    struct question
    {
        char question_text[QUESTION_SZ]; 
        char answer[ANSWER_SZ];
    };
    
  2. 次に、質問の配列を作成して初期化します。

    struct question my_poll[32];
    
  3. 次に、一連の質問をループして処理します。

    int i = 0;
    char *p = NULL;
    int oops_we_failed = 0;
    for(i = 0; i < 32; i++)
    {
        printf("Question %d: %s. Your answer?\n", i, my_poll[i].question);
    
        /* fgets() will block until user enters an answer */
        p = fgets(my_poll[i].answer, ANSWER_SZ, stdin);
    
        if(NULL == p)
        {
            /* nothing was read, an error could have happened */
            oops_we_failed = 1;
            break;
        }
        else
        {
            /* now we have a possible answer stored in poll[i].answer */
        }
    }
    
  4. これで、一連の質問と対応する回答が得られました。

任意の長さのポーリングを動的に作成するには、リンクされたリストを調べる必要がある場合があります。

于 2012-12-18T03:16:18.040 に答える