[1] 質問文
[1.1] 自分が今行いたい事は何か
ー1から100までの乱数をー1が出るまで表示し続けるプログラムを作りたいです。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
まず初めに配列を使って(図1)
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int getrand(int min,int max);
int main (void)
{
int random[],i = 0;
do {
random[i] = getrand(-1,100);
printf ("%d\n",rand[i]);
i++;
}while (rand[i] != -1);
return 0;
}
int getrand(min,max)
{
static int d = 0;
if (d == 0) {
srand ((unsigned int) time(NULL));
d = 1;
}
return min + (int) (rand() * (max - min + 1)/(RAND_MAX + 1));
}
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int getrand(int min,int max);
int main (void)
{
int i = 0;
do {
int *p;
p = &getrand(-1,100);
printf ("%d\n",*P);
}while (*p != -1);
return 0;
}
int getrand(int min,int max)
{
static int d = 0;
if (d == 0) {
srand ((unsigned int) time(NULL));
d = 1;
}
return min + (int) (rand() * (max - min + 1)/(RAND_MAX + 1));
}
最初に図1を実行すると、
「9行目」で記述エラーを発見しました。
unknown type size
と出たので適当にrandom[]の中に100を入れてみて実行すると
「12行目」で記述エラーを発見しました。
「pointer」を付け忘れています。
と出てわからなくなりました。
そこで、ポインタ変数でも使ってみようと思い図2を実行すると
「12行目」で記述エラーを発見しました。
「lvalue」を付け忘れています。
と出て調べてみると左辺がいけないかなんからしいですがいまいちピンときません。
[1.4] 今何がわからないのか、知りたいのか
今回知りたいのは
・どうすれば配列の個数を定数ではなくー1が出るまでの個数に設定できるのか。
・図1,図2の12行目では一体何のエラーが出てどう改善すればいいのか
・これらを直した後に発生するだろう問題点
・他に「こういう質問する人はここ勘違いしてるだろうな」ということについてのアドバイスなどあると嬉しいです。
(できれば)実は乱数の書き方は見様見真似でやっていてそこに関する質問です
・式はある程度理解できるのですがrand()にはどんな引数が入りますか?
・srand()の使い方とその中に入ってる引数について、unsigned intが符号の付かない変数の宣言などに使われることは知ってるのですがtime()とはどういう働きの関数ですか?
[2] 環境
[2.1] OS : Windows10
[2.2] コンパイラ名 : よくわからなくて申し訳ないですがc言語の「学習用c言語開発環境」というものを使ってます
[3] その他
・どの程度C言語を理解しているか
始めて三週間程度苦しんで覚えるc言語というところで独学でやってます。
http://9cguide.appspot.com/index.html
ここで二十章までと乱数の項目は一通り読みました。
・ライブラリを使っている場合は何を使っているか
すいませんライブラリが何かわかりません。
答えられる範囲でどれか一つでもいいので教えていただけると幸いです。