質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

4853閲覧

乱数を変数に格納したい

h_proc

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/12/04 13:28

乱数を表示させる関数numberを作りました。これをprintf("%d\n",number())で表示させると乱数として表示されるのですが、以下のように変数を設定すると、(10回繰り返した)すべて1が表示されてしまいます。乱数を変数に格納することはできないのでしょうか。対処法を教えていただきたいです。

c

1#include<stdio.h> 2#include<stdlib.h> 3 4int number(void) { 5 return (int)((((double)rand()) / ((double)RAND_MAX + 1)) * 10) + 1; 6} 7 8int main(void) 9 10{ 11 int m = 0; 12 m = number(); 13 for (int i = 0; i <= 10; i++) { 14 printf("%d\n", m); 15 } 16return 0; 17}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ループの中で代入しましょうよ


乱数というのは、箱の中にあるたくさんの数字(を書いたボール)からひとつを出してくるようなもんです
出すたんびにデタラメに数字を持ってくるだけのはなしで、
持ってきた数字は、どういじろうが変わりません

投稿2018/12/04 13:31

編集2018/12/04 14:22
y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2018/12/06 03:45

回答ありがとうございます。
h_proc

2018/12/06 03:57

乱数を変数に格納し、その変数をswitch文で使うことは可能でしょうか。 int res = number(); switch (res) { case 1: というようなことはできるのでしょうか。
y_waiwai

2018/12/07 10:11

できます ふつうのint変数ですから
h_proc

2018/12/10 02:04

回答ありがとうございます。乱数を変数に格納するとなぜだか1しか出てきません。 試しに、 int i = 0; i = get_number(); printf("%d\n", i); printf("%d\n", i); と実行したのですが、1しか表示されませんでした。どこに原因があるのでしょうか。
y_waiwai

2018/12/10 02:08

get_number関数のコードがわからないと答えようがないです。提示してください
h_proc

2018/12/10 02:19

大変申し訳ありません。 int get_number(void) { return (int)((((double)rand() / ((double)RAND_MAX + 1))*3 )+1); } よろしくお願いい致します。
y_waiwai

2018/12/10 02:37 編集

1から3を出したいなら、 rand()%3+1 でいいのでは
h_proc

2018/12/10 03:20

ありがとうございます。学校で指定されている方法で作っていて、、、%は使わずに作っています。
y_waiwai

2018/12/10 03:26

まずは、rand関数の戻り値がどういう数字が出るのかみてみては。
guest

0

いくつか問題点はありますが、基本的なところからいくと

m = number(); //ここでランダムに選ばれた数字「1つ」を for (int i = 0; i <= 10; i++) { printf("%d\n", m); //ここで11回書き出しているだけ }

毎回ランダム生成したいのであれば、ループの中に入れましょうということです。

for (int i = 0; i <= 10; i++) { m = number(); //毎回ランダムな数を生成して printf("%d\n", m); //書き出す }

もしくは、直接関数を呼び出す

for (int i = 0; i <= 10; i++) { printf("%d\n", number()); }

次に、毎回1が出るのはrand()を初期化していないからです。
上記の通り書き換えても、11個ランダムな数がでますが、実行する度に同じ11個の数字が出ます。
詳しくはsrand()を調べてもらうとして、シードにtime()を使うのが一般的です。
ただ、これをnumber()に入れるとループ時に高速で初期化される関係で、同じ数が生成されてしまいます。

良い方法ではありませんが、ややこしいのでとりあえずmain()に追加してみると、
実行する度に11個違う数字がでるようになります。

#include<time.h> int main(void) { srand((unsigned) time(NULL)); ・・・

余談ですが、number()は恐らく1~10の数をランダム生成するのが目的なのかなと。
一応rand()で同じことが出来ます。

#include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { srand((unsigned)time(NULL)); for (int i = 0; i <= 10; i++) printf("%d\n", rand()%10 + 1); return 0; }

投稿2018/12/04 15:24

lys

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2018/12/06 03:46

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問