C++ ```### 前提・実現したいこと ここに質問の内容を詳しく書いてください。 C++で1〜52までの数字を返す関数が分かりません。 条件が重複しないようにと、数字がなくなった場合は0を返すのと、実行するたびに違う数字がでることです。 ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ
エラーメッセージ
### 該当のソースコード int draw(void) { const int NUMBER =52; static int a[NUMBER]; int t=0; int card=0; int total; int b; for(int i=0;i<NUMBER;i++){ a[i]=i+1; } srand(time(NULL)); total=NUMBER; for(int i=0;i<NUMBER;i++) { t=rand()%NUMBER+1; card=a[i]; a[i]=a[t]; a[t]=card; total--; } return t; } ```ここに言語名を入力 C++
試したこと
main関数は省いています。
このソースコードを試したのですができません。
補足情報(FW/ツールのバージ### ヘディングのテキストョンなど)
ここにより詳細な情報を記載してください。
提示のコードではどういう動作をしてどういう不具合があるんでしょうか
error: called object type ‘int’ is not a function or function pointer.
と出ます。
そのエラーコードは
drawnumber = draw()と出ます。
「該当のソースコード」に書かれたコードは、ご自分で書いたものですか?そうでないならば、理解されていますか?
> static int a[NUMBER]; があるので、何となく「一回生成した1から52までの数字を格納しておく配列」のように思います。未完成なint draw()関数を完成させろ、と言う問題なのではありませんか?
助言してもらいながら作ったものですので、あまり理解はできておりません。
すみません。
はい。そうだと思います。
既に2件、回答をいただいているのと、ご提示のdraw()関数が意味不明(<ごめんなさい)なので私は回答は控えますが、本欄にコメントした責任として書くと、draw()で恐らくやりたかったこととしては、
(1) draw()が呼び出されるたびに1~52のいずれかの値を生成して、static int a[NUMBER];に収める。その値は取得済みなので、次に呼び出されたときは使わない。
(2) draw()が初めて呼び出されたとき、1~52の乱数を作成してstatic int a[NUMBER];の全てに収めておく。あとは呼び出されるたびに最初のa[0]から~a[51]の値を返す。
ような動きを目指していたのだと思います。助言されながら作った、と言うことですので、上記は既に説明済みであったのかもしれません。あるいは違う方法かもしれませんが。
※以降はコメントを控えます。
はい。説明不足ですみません。
ありがとうございました。
回答3件
あなたの回答
tips
プレビュー