昨日の記事のある意味,続きです.int score[2][9];で宣言した2次元配列に,ある試合のジャイアンツとタイガース*1の各回の点数を格納しておき,文字のみでスコアボードを出力するプログラムを考えてみます.先攻となるジャイアンツの合計得点は,score[0][0]からscore[0][8]までの和,後攻めのタイガースについては,score[1][0]からscore[1][8]までの和として,計算できます.愚直にたし算をコード化するのではなく,2重ループを使うべきところです.
本日のテーマはその得点計算ではなく,各回の点数の前に,チーム名を出力するという話です.「for (i = 0; i <= 1; i++) {」と「}」を書き,中に入れる最初のコードが,次のとおりだと,うまくいくでしょうか?
if (i == 0) { printf("Giants|"); } else (i == 1) { printf("Tigers|"); }
いえ,これでは,コンパイルエラーとなります.「else」の直後に,ifやwhileと同じように「(条件式)」を書くことは,できません.
そこで次のように修正します.これならうまく動きます.
if (i == 0) { printf("Giants|"); } else { printf("Tigers|"); }
次のコードは,どうでしょうか.
if (i == 0) { printf("Giants|"); } else if (i == 1) { printf("Tigers|"); }
問題なく,動きますが,「Cらしいコード」とは言えません.forループにおいて,iのとる値は,0か1のどちらかなので,「if (i == 0)」が偽と判断されれば,iの値は必ず1となります.そういうときは,else ifは使うべきではありません.
それでも,else以降はiの値が1のときの処理なのだというのを,明示したければ…
コメントを書くという手があります.例えば以下のようにします.
if (i == 0) { printf("Giants|"); } else { /* i == 1 */ printf("Tigers|"); }