たとえば、以下のようなファイル
shitsumon.txt
を用意しておく
そんなあ、けちー、いけずー、ろくでなしー、ぼこっ 0 0 これから質問を始めます。よろしいですか? 2 0 納豆にカラシを入れる? 3 4 はいさいなら 0 0 肩が凝りますか? 5 6 つらいですね! 0 0 いいなあ 0 0
1行目が質問番号0、2行目が質問番号1、3行目が質問番号2…だとする。 最初に質問番号1の
これから質問を始めます。よろしいですか?
という質問が出力され、yesと答えると質問番号2へ、noと答えると 質問番号0に進む。進み先に両方とも0と書かれている場合には、 そのメッセージを出力してプログラムを終了する。
これから質問を始めます。よろしいですか? y 納豆にカラシを入れる? n 肩が凝りますか? y つらいですね!
まず、データファイルを読み込む処理を次のようにする。
このプログラムでは、質問文データをshitsumon.txt
に保存するものと仮定している。
char buffer[100]; char question[300][50]; int yes[50], no[50]; int n=0; int ikisaki=1; FILE *q; : : /* 質問文データを読み込む部分 */ q = fopen("shitsumon.txt", "r"); while (NULL != fgets(buffer, sizeof buffer, q)) { if (3 == sscanf(buffer, "%49s %d %d", question[n], &yes[n], &no[n])) { n++; } } fclose(q); : : /* その後質問を繰り返す部分 */ while (1) { printf("%s: ", question[ikisaki]); if (yes[ikisaki] == 0 && no[ikisaki] == 0) { printf("\n"); break; } fgets(buffer, sizeof buffer, stdin); if ('\n' == buffer[strlen(buffer)-1]) { buffer[strlen(buffer)-1] = '\0'; } if (もしYESの答なら) { ikisaki = yes[ikisaki]; } else if (もしNOの答なら) { ikisaki = no[ikisaki]; } else { printf("yかnで答えてね\n"); continue; } }
shitsumon.txtのサンプル。