前章で21章のプログラムに3つ間違いがあり、 そのうちの1つは考えればわかるはずだ、と言いましたが、 どこが悪いかわかりましたか?
そんなに難しいところでもないので、 何回かあのプログラムを実行すればわかると思います。答えは、最後のif文です。 このif文、条件分けが完全ではありません。 あの部分は以下のようになっています。
あれ?なんかいつもと違うぞ?
if ( c == '1' ){ // c が"1"の時 : : }else{ // それ以外、つまりc が"1"以外ならなんでも : : }本来なら、cが"1"の時は足し算、cが"2"の時に引き算となっているのに、 このif文だと、cが"1"の時はいいのですが、 cが"3"だろうが、"b"だろうが、引き算になっちゃいます。 これはまずいですね。
こーゆーときは、
1の時 足し算
2の時 引き算
それ以外の時、エラーというようにしなければなりません。
それをプログラムにするとこんなかんじですね。
あるいは、switch文を使っても良いかもしれません。 switch文を使うとこのようになります。
if ( c == '1' ){ 足し算 }else if ( c == '2' ){ 引き算 }else{ エラー }
switch ( c ){ case '1': 足し算 break; case '2': 引き算 break; default: エラー }では、21章のプログラムを修正するのですが、 せっかくですので、前章でやったgetchar関数の個所も修正しましょう。
今回は冒頭のおまじないが1行増えています。 これは、exit関数を使うために必要です。
このexit関数はどんな役割をするかと言うと、 いきなりプログラムを終了してくれます。 (でも、このままだとコンパイラーによってはWARNINGが出るかもしれませんが、 別に気にしなくてもOKです)つまり、足し算か引き算を入力するforループ文中で、 2文字以上入力すると強制的に終了させるというものです。
あれ?じゃーこの個所で、「1」と「2」以外はエラーとした方が良いんじゃないの?
その通り!
まー、他にも色々「こーしたほうがいい」とか「あーしたほうがいい」とか出てくるはずです。 一度、自分の好きな様に作り変えてみてはいかがでしょうか?
C言語のメニューに戻る