2016-10-28 13 views
0

私はプログラミングの初心者ですから、基本的なコードとメソッドを知っているだけなので、答えを書くときにはもっと少し必要ですこのサイトで通常必要とする人より説明。ありがとうございました!ファイルから読み込みますが、すべての行ではありません。

私はテキストベースのアドベンチャーゲームをする宿題を持っています。 私は使用するプログラムにファイルからテキストを読み込まなければなりません。

最初に私は 'Question'を1行に書くことを考えました。 そして、その行の次の3行は、3つの "選択肢の選択"を持つ行になります。

この方法では、文字列(質問、ans1、ans2、およびans3)の4つの配列を作成し、これらの文字列のそれぞれに4行目を読み込む必要があります。

私はあなたがここで何をしたいのか理解してくれることを願っています。しかし、それは可能ですか?

はいの場合はどうですか?

現在、私はこのコードを持っていますが、サイクル(for/while/etc。)に入れると文字列にすべての行が読み込まれますが、それは良くないので、文字列の配列 これは、プログラムから4行目ごとに読み込むことだけです。

私の現在のコードは次のとおりです。

char questions[40][200]; 
    FILE* fp; 
    fp=fopen("text.txt", "r"); 
    int i; 
    for (i=0; i<=3; i++) 
     { 
      fgets(questions[i], 200, fp); 
     } 
    fclose(fp); 

これは良くない文字列に最初の4行になるだろう。私はこの場合、最初の4つの質問を私の弦で味わっていきたいです。それを達成するためにコードをどのように変更する必要がありますか?

+3

は、店舗4日、リセット、3件まで読んで捨てる、カウンターを持っています。 –

+1

あなたはすべての行を読んでください。あなたはそれを読んだ後でラインを無視することができますが、まだそれを読む必要があります。中間線を読み取らずにスキップできるようにするには、ファイルに構造体を追加する必要があります。それは可能ですが、行を読み、無視することよりもはるかに困難です。 –

+0

一度に読んでみませんか?1つの質問、3つの答え、やり直してください。 – alk

答えて

3

これを行う1つの方法は、ループ内のすべての行を読み取ることです。あなたの質問の各オプションのための追加の配列(すべてを保持するために、例えば、配列「」の回答)を作成し、その後、インターレース形式でそれらのすべてをお読みください。

char questions[40][200]; 
char answersA[40][200]; 
char answersB[40][200]; 
char answersC[40][200]; 
/* ... */ 
for (i=0; i<=3 /* Or however many questions there are */; i++) 
{ 
    fgets(questions[i], 200, fp); /* Read the question */ 
    /* Read the answers */ 
    fgets(answersA[i], 200, fp); /* Read the answer for option A */ 
    fgets(answersB[i], 200, fp); /* Read the answer for option B */ 
    fgets(answersC[i], 200, fp); /* Read the answer for option C */ 
} 
/* ... */ 

追加

次に、あなたがしたい場合特定の質問iの3つの回答オプションを得るには、answersA[i]answersB[i]、およびanswersC[i]を取得するだけです。

+1

ああ、これはうまくいくとは思っていませんでした! これは私が思ったよりも簡単です。 お返事ありがとうございました。 あなたはupvoteを手に入れました。できるだけ早く解答として受け入れます! 速くて役立つ答え!ありがとう! – Noxter

+0

大歓迎です。私たちが助けてくれてうれしい! –

+0

私は3つの答えしか持っていないことをあなたの質問に示したので、私は "D"オプションを削除するために自分の答えを編集しました。別の番号の回答が必要な場合は、正しい番号を読んでください:) –

1

別のアプローチは、すなわち、質問と回答、一緒に属するものを一緒に持って来るために構造体を使用することです:

#define QUESTION_SIZE (300) 
#define ANSWER_SIZE (200) 
#define NUMBER_OF_QUESTIONS (42) 
#define NUMBER_OF_ANSWERS (3) 

struct QA 
{ 
    char question[QUESTION_SIZE];  
    char answers[NUMBER_OF_ANSWERS][ANSWER_SIZE]; 
} 

int main(void) 
{ 
    struct QA qa[NUMBER_OF_QUESTIONS] = {0}; 

    FILE fp = .... /* open file here */ 

    size_t q; 
    for (q = 0; q < NUMBER_OF_QUESTIONS; ++q) 
    { 
    fgets(qa[q].question, sizeof qa[q].question, fp); 

    { 
     size_t a; 
     for (a = 0; a < NUMBER_OF_ANSWERS; ++a) 
     { 
     fgets(qa[q].answers[a], sizeof qa[q].answers[a], fp); 
     } 
    } 
    } 

    fclose(fp); 

    ... /* do stuff */ 
関連する問題