YES/NO性格診断のヒント

たとえば、以下のようなファイル 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のサンプル。


本日の目次