第27問

引数で数値を受け取ると、対応するテキストを表示する関数を作りました。その関数を次のように呼び出してみたところ、どうやら期待どおりに動作しているように見えます。でも、できれば早いうちに直しておきたい部分があります。

どこを直すのがいいか分かりますか?
main.c
#include <stdio.h>
#include <stdlib.h>

/* 引数が1のときは"one"、2のときは"two"と表示する */
void PrintOneOrTwo(int n) {
  if (n == 1) {
    /* 1のとき */
    puts( "one" );
  } else {
    /* 2のとき */
    puts( "two" );
  }
}

int main(void) {
  PrintOneOrTwo(1);
  PrintOneOrTwo(2);

  return EXIT_SUCCESS;
}
実行結果
one
two
今回のプログラムは、コメントが入ってて読みやすいですね。
そうね。最初のコメントが関数の仕様になってるのが分かるかしら?
最初のコメントはこれか……
/* 引数が1のときは"one"、2のときは"two"と表示する */
void PrintOneOrTwo(int n) {
  ……
}
引数によって表示するテキストが変わるっていう仕様ですね。
そうそう。関数の中身はどうなってるかしら?
関数の中身にもコメントが入ってる。ふむふむ……ん?
  if (n == 1) {
    /* 1のとき */
    puts( "one" );
  } else {
    /* 2のとき */
    puts( "two" );
  }
んんー。なんだろう、これ……
ね。なんだか正しいような正しくないようなプログラムでしょ?
はい。最初は読みやすいと思ったんですけど、よく見たらモヤモヤしてきました……
そのモヤモヤの理由について考えるのが、今回の問題よ。
な、なるほど。
問題の関数に3を入力したらどうなるでしょうか?