Q&A (電気電子)

switch文_メモ

switch文でのメモ。P100

プログラムの間違いを見つける練習をしたい。

[ | 1 2 3 4 5 6 7 8 9 ]

と表示させたい。

間違ったプログラム

一回目のプログラムは以下の感じでやったが動かなかった。


#include <iostream>

int main()
{
    int no = 9;
    int re_no = 1;

    int i, j;
    int cross = 1;

    for (i = 1; i <= no+cross; i++) {       //最初の一行(設定項目) 必ずしも一つのループ内に入れるのが最適とは限らない。
        
        switch (i) {
        case 1: printf("  "); break;
        case 2: printf("  |");  break;
        default:printf("%3d", re_no); break;
        }
        re_no+=1;//iが三以上になれば、次回以降は1,2,3,4.....

    }
}

ミスった結果は以下のような感じ。

    |  3  4  5  6  7  8  9 10

1と2が表示されない。

なぜか?

re_noでわざわざ分けて変数を保存しているのに、ここではスイッチ文内に

re_no+=1;

を記述していないので、分けたにもかかわらず、1,2の時の動きがiと同じになってしまう。

メモ

プログラムが動かなかったらまず上から追っていく。
ループ系の処理ではインクリメントデクリメントの位置があっているかをまず確認する。

正しいプログラム

#include <iostream>

int main()
{
    int no = 9;
    int re_no = 1;

    int i, j;
    int line = 2;

    for (i = 1; i <= no+line; i++) {       //最初の一行(設定項目) 必ずしも一つのループ内に入れるのが最適とは限らない。
        
        switch (i) {
        case 1: printf("  "); break;
        case 2: printf("  |");  break;
        default:printf("%3d", re_no);
            re_no += 1; break;  //iが三以上になれば、次回以降は1,2,3,4.....
        }
       

    }
}

//※cross→lineに変数名変更。

以上。

-Q&A (電気電子)
-