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