第23章

第23章 計算機を作ろう(2)

前章で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の時 引き算
それ以外の時、エラー

というようにしなければなりません。
それをプログラムにするとこんなかんじですね。

if ( c == '1' ){
	足し算
}else if ( c == '2' ){
	引き算
}else{
	エラー
}
あるいは、switch文を使っても良いかもしれません。 switch文を使うとこのようになります。

switch ( c ){
	case '1':
		足し算
		break;
	case '2':
		引き算
		break;
	default:
		エラー
}

では、21章のプログラムを修正するのですが、 せっかくですので、前章でやったgetchar関数の個所も修正しましょう。

今回は冒頭のおまじないが1行増えています。 これは、exit関数を使うために必要です。
このexit関数はどんな役割をするかと言うと、 いきなりプログラムを終了してくれます。 (でも、このままだとコンパイラーによってはWARNINGが出るかもしれませんが、 別に気にしなくてもOKです)

つまり、足し算か引き算を入力するforループ文中で、 2文字以上入力すると強制的に終了させるというものです。

あれ?じゃーこの個所で、「1」と「2」以外はエラーとした方が良いんじゃないの?

その通り!
まー、他にも色々「こーしたほうがいい」とか「あーしたほうがいい」とか出てくるはずです。 一度、自分の好きな様に作り変えてみてはいかがでしょうか?

C言語のメニューに戻る


TOPに戻る