86376


書籍「すっきりわかるC言語入門」の練習問題の解答例について質問です。

要素３のint型配列 answer の各要素に０〜９のランダムな1桁の数を重複しないように格納するコードの解答例です。  
bool型で check を定義した後の check = false; が何を意味しているのかが理解できません。  
変数 check に false を代入しただけで for(answer[i] == answer[j]) がどうして実行されるようになるのでしょうか。

[code]

    int answer[3];
    int input[3];
    bool check;
    for (int i = 0; i < 3; i++){
        do{
            answer[i] = rand()% 10;
            for(int j = 0; j < i; j++){
                check = false;
                if(answer[i] == answer[j]){
                    break;
                }
                check = true;
            }
        }while (i > 0 && check == false);
    }
    
[/code]


CC BY-SA 4.0
2022-02-16T01:35:22.883
86375
2022-02-16T02:13:51.013
2022-02-16T01:43:20.287
3060
51450
question
c
解答例のコードがどのように動くのかわかりません


do-whileや計算を少なくする工夫に富んでいますが、変則的で欲張りな解答例ですね。  
下記にコメントをつけておきました。

[code]

    int answer[3]; //要素は全て0となる前提
    int input[3];
    bool check;
    for (int i = 0; i < 3; i++)
    {
        do
        {
            // ランダムな数を生成
            answer[i] = rand()% 10;
    
            // 今までの数を確認する
            // iが2なら、jは0と1を確認)
            for(int j = 0; j < i; j++)
            {
                //ここで未チェック(初期状態)とする
                check = false;
    
                //もし重複があったらanswer[i]を作り直すためにforループを抜ける
                //このときdo-whileは抜けないので、iは変わらない
                if(answer[i] == answer[j])
                {
                    break;
                }
                // ここでチェック済みとする
                // whileの条件を満たさないためdo-whileを抜けて次のiのforループから続ける
                check = true;
            }
        }while (i > 0 && check == false);// ここでループ条件を設定して確認(checkがtrueになるまで繰り返す)
    }
    
[/code]


CC BY-SA 4.0
2022-02-16T01:54:10.917
86376
2022-02-16T02:13:51.013
2022-02-16T02:13:51.013
51317
51317
86375
answer