質問: ### 前提・実現したいこと 最終的に 「 ○ × △ × □ 」と出力したい。 ○、△、□、はそれぞれ10個の要素から一つランダムで選んだもの(10C1)!それ三つの掛け合わせを出力したいというわけである。 ただし、○、△、□、には文字を入れたい! ### 発生している問題・エラーメッセージ 回答およびそのリンク先を参考して、乱数の発生をやってみたものの、初めてでうまくできませんでした!どう修正すればよいのでしょうか? ### ソースコード 言語:C++ #include #include #include #include using namespace std; inline void InitRand(){ srand((unsigned int)time(NULL)); } inline int Dice(){ return rand()%6+1; } int main(){ char const* moji[]={"moji-retsu0", "moji-retsu1", "moji-retsu2", "moji-retsu3", "moji-retsu4", "moji-retsu5", "moji-retsu6", "moji-retsu7", "moji-retsu8", "moji-retsu9"}; int rnd0, rnd1, rnd2; InitRand(); for (rnd0=0;rnd0<10;rnd0++) cout << Dice()+Dice() <<''; for (rnd1=0;rnd1<10;rnd1++) cout << Dice()+Dice() <<''; for (rnd2=0;rnd2<10;rnd2++) cout << Dice()+Dice() <<''; cout << flush; cout << moji[rnd0] << "x" << moji[rnd1] << "x" << moji[rnd2] << "\n"; return 0; }
回答: こんにちは。 「10個の要素」が10個の文字の意味でしたら、下記のようにすると良いです。 まず、その10文字を`char moji[]="0123456789";`のように定義します。(0~9の部分は実際に使いたい文字を書いて下さい。全角文字は使えません。半角のアルファベットと数字記号です。) 次に、3つの0~9までの乱数を生成します。`int rnd0, rnd1, rnd2;`に生成したと仮定します。 そして、`std::cout << moji[rnd0] << "x" << moji[rnd1] << "x" << moji[rnd2] << "\n";`で終わりです。 乱数の生成方法はググればたくさんでてきます。例えば、こことかですね。 もし、「10個の要素」が10個の文字列の意味でしたら、mojiの定義を下記のように変更すればOKです。 `char const* moji[]={"moji-retsu0", "moji-retsu1", ..., "moji-retsu9"};` もちろん、`"moji-retsu*"`の部分は実際に使いたい文字列を入れて下さいね。 全角文字を使いたい時は、後者を使えばたぶんできます。(コンパイラやOSでおまじないが必要な場合がありますので、必要であればコンパイラやOSの情報も書いて別途質問して下さい。) では、頑張って下さい。 【追記】 お疲れ様です。 シングル・クォートは文字をはさむ必要があります。文字がないのでエラーになっています。 リンク先では、`' '`と間にスペースが入っていますよ。 次に、rand()関数は要するに0以上のランダムな整数を返却します。 `m % n`はmをnで割った余りを求めます。 つまり、`rand() % 6'は、0以上のランダムな整数を6で割った余りです。0~5になりますね? 【追記】 答えです。 ``` #include #include #include #include using namespace std; inline void InitRand() { srand((unsigned int)time(NULL)); } inline int Dice() { return rand()%10; // ←ここ } int main() { char const* moji[]= { "moji-retsu0", "moji-retsu1", "moji-retsu2", "moji-retsu3", "moji-retsu4", "moji-retsu5", "moji-retsu6", "moji-retsu7", "moji-retsu8", "moji-retsu9" }; int rnd0, rnd1, rnd2; InitRand(); rnd0=Dice(); // ←この辺 rnd1=Dice(); rnd2=Dice(); cout << moji[rnd0] << "x" << moji[rnd1] << "x" << moji[rnd2] << "\n"; return 0; } ``` 元のソースとどこが異なるのか、較べて見て下さい。マークしているところを意味的に変えてます。 (他の部分は見やすくするために変更させて頂きました。) この差を説明する根性が足りませんでした。すいません。