• ベストアンサー

エラーになります

サイコロの目をランダムに出るプログラムを作ろうと思ったのですが エラーになってしまします どこがおかしいのでしょうか?ソフトはCygwinです #include <stdio.h> #include <stdlib.h> main() { int rnd, saikoro; srand( time(NULL) ); rnd = (rand() % 100); if ( rnd < 50 ){   saikoro = 1; } else if ( rnd < 50+25 ){   saikoro = 2; } else if ( rnd < 50+25+10 ){   saikoro = 3; } else if ( rnd < 50+25+10+5 ){   saikoro = 4; } else if ( rnd < 50+25+10+5+5 ){   saikoro = 5; } else if ( rnd < 50+25+10+5+5+5 ){  saikoro = 6; } }

質問者が選んだベストアンサー

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.5

>サイコロの目をランダムに出るプログラムを作ろうと思った・・ ★オリジナルのソースには、質問投稿で用いている「全角空白」はないよね。 >エラーになってしまします ★「エラー」ではなく「警告」では? ・main()関数が値を返していないという警告 ・saikoro に値を入れただけで使われていないという警告 ☆主に上の2点を修正した以下のソースも「エラー」になりますか? #include <stdio.h> #include <stdlib.h> void main() { int rnd, saikoro; srand( time(NULL) ); rnd = rand() % 60; // 0 - 59 saikoro = 6; if( rnd < 50 ) saikoro = 5; if( rnd < 40 ) saikoro = 4; if( rnd < 30 ) saikoro = 3; if( rnd < 20 ) saikoro = 2; if( rnd < 10 ) saikoro = 1; printf( "%d\n", saikoro ); }

その他の回答 (4)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.4

>> main() >関数定義になっていません。 いえ、なっています。 戻り値を省略すると自動的にint型とみなします。

  • i-kujou
  • ベストアンサー率50% (13/26)
回答No.3

> main() 関数定義になっていません。 int main() のように返り値を指定してください。 「エラーがでる」だけじゃなくて、どのようなエラーメッセージがでるかまで記述すると、もっと具体的な返答ができるかもしれません。

回答No.2

こういった質問は、「エラーになります」で終わらずに、どういうエラーが表示されたかがあると、回答しやすいわけですが。 とりあえず、ここに書かれたままのファイルだと、所々に全角のスペースが紛れ込んでいます。 「不正な文字」というようなエラーであれば、これが原因です。

noname#62142
noname#62142
回答No.1

#include <time.h> って必要じゃありません?

abc-1356
質問者

お礼

そうなんですか>< ありがとうございます! #include <time.h>を入れて試してみます ありがとうございました

関連するQ&A

  • これを実行するには

    私の知り合いにプログラムを作ってもらったのですが、どうすればよいのかまったくわかりません。どうすればよいでしょうか。 ↓このようなものです。 #include <stdio.h> #include <stdlib.h> #include <time.h> typedef int BOOLEAN; BOOLEAN TRUE = 1; BOOLEAN FALSE = 0; int main(void) { int wc,c,rnd; BOOLEAN dec[50] = {FALSE}; c = wc = 0; dec[0] = TRUE; srand(time(NULL)); while(1){ rnd = rand() % 49; if(dec[rnd] == FALSE){ dec[rnd] = TRUE; if(wc == 6){ printf("%0*d\n",2, rnd); c++; wc = 0; if(c == 49){ break; } } else{ printf("%0*d,",2, rnd); c++; wc++; } if(c == 24){ printf("00,"); c++; wc++; } } } return 0; }

  • srand(time(NULL))の使い方

    C言語の勉強中で「ランダムな整数値を作成し、その数値が偶数か奇数かを判定するプログラムをif~else 構文を使って作成」したいのですが下記のプログラムでやってみたのですがまだまだ知識不足で完成しません。知識をお借りできればと思っていますのでどなたか教えてください。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { { int = i; i = rand(); srand((unsigned)time(NULL)); printf("%d\n",rand()); } if(i % 2 == 0) { printf("偶数である:\n",i); } else { printf("奇数である:\n",i); } return 0; }

  • C言語 スロットみたいにするやり方が分かりません

    今自由課題でスロットのように数字を乱数で表示させて、Enterを押すと押したときの値を表示させたいです しかし、今書いているやつだとなぜかスロットみたいに数字の表示ができません。 おそらくif文で一旦止まってしまっていると思うのですが、どこが悪いのか教えてください。 #include <stdio.h> #include <stdlib.h> int main(){ int a,b,c; srand(time(NULL)); c = getchar(); b = rand()%6+1; for(;;){ a = rand()%6+1; printf("\033[H\033[J"); printf("%d",a); if(getchar() == '\n'){ printf("あなたのサイコロの値は%dです!!\n",a); break; }else{ continue; } } return 0; }

  • 0から1までの乱数(実数値)を発生させるのと、ある確率の時に処理をさせたい。

    1 #include <stdio.h> 2 #include <time.h> 3 #include <stdlib.h> 4 #define P 0.05 5 int main(void) 6 { 7 int abc; 8 double x; 9 srand(time(NULL)); 10 x = (double)rand()/RAND_MAX; 11 if(x > P){ 12 abc = 1; 13 } ・・・ (1)0から1までのランダムな実数値を10行目で発生させているつもりですが、あまりきざみが良くない?とこ耳にはさんだので0から1までの最もいいと思われるランダムな実数値の発生を教えてもらえないでしょうか? (2)11行目で約1/20000の確率でabcに1を代入したいのですが、上記のプログラムをどのように改良すればよろしいでしょうか? どちらか片方でもアドバイス頂ければ幸いなので、お手数ですがよろしくお願いいたします。

  • 20マスのスゴロクをプログラミングしたいのですが、

    20マスのスゴロクをプログラミングしたいのですが、 20マス丁度でないと上がれないようにしたいです。 #include<stdio.h> #include <stdlib.h> #include <time.h> main() { srand((unsigned) time(NULL)); int sai, rest=19, masu=1; while(masu != 20){ sai= rand() % 6 + 1; printf("サイコロ %d、",sai); masu +=sai; rest -=sai; if(masu<20){ printf("今のマス %2d、 ",masu); printf("残り %2d\n",rest);} else if(masu==20) { printf("上がり\n",sai);} else { printf("上がれない\n",sai);} } return(0); } ここまでは出来たのですが、うまく実行できず上がれないが無限ループしてしまいます。 どのようにしたらうまくいくでしょうか? 教えてください!

  • ifについて

    C言語を最近学び始めました。 以下をコンパイルし、実行しても予期せぬ結果になってしまい、困っています。 #include <stdio.h> #include <time.h> #include <stdlib.h> void retry(int); int main(void); int main(void) { int x,y,yn; srand(time(NULL)); x = rand()%6 +1; //Player y = rand()%6 +1; //CPU printf("Player:%d\n",x); printf("CPU:%d\n",y); if(y<<x){printf("Player > CPU\n");} else if(x<<y){printf("Player < CPU\n");} else {printf("Player = CPU\n");} retry(yn); return 0; } void retry(int yn) { printf("\nRetry ?(Yes=1/No=0)>"); scanf("%d",&yn); if (yn==1){printf("\n\n");getchar();main ();} else if(yn==0){printf("\n\nend");exit(0);} else {retry(yn);}; } サイコロを2人が振り、目が大きいほうが勝ちというものなのですが、 「Player:3 CPU:6 Plyaer>CPU」 といった具合にx,yの値に関わらず「Plyaer>CPU」と表示されます。 何が原因なのでしょうか。 よろしくお願いします。

  • C言語でサイコロのプログラムを作ってみたのですが

    まず、以下のような”実行するたびに1~6の数字をランダムに出力するプログラム”を 作ってみたのですが、特定の数字が出てこないのです。 例えば、1と4、2と5、3と6 が出ない ここで気がついた事は、 1、出ない目の2数の差は3であること。 2、乱数自体を表示させたところ、ちゃんと1秒毎に乱数は変わっている。こちらには問題はない 3、約1分間隔で、出ない数字の組み合わせが変わる。 (例えば 1,3,4,6,1,6,3,6,4(2と5が出ない)  →1分間実行し続けると・・・  2,3,6,5,3,2,2,6(1と4が出ない)) この原因は一体なんなのでしょうか・・・ とても気になって仕方がありません。わかる方教えてください。 以下、ソースコードになります #include<stdio.h> #include<time.h> #include<stdlib.h> int func(void); int main(void){ int number=0; number=func(); //サイコロの目の表示 printf("%d\n",number); return 0; } int func(){ //乱数の初期化 srand((int unsigned)time(NULL)); //サイコロの目をランダムで出力し、返す return rand()%6+1; } プログラムの仕組みは パソコンから現在の歴時刻を元に乱数の初期値を変更 ↓ rand関数で適当な値を受け取り、6で割った余剰+1を計算し値を返却する

  • 乱数発生

    #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) {int y, m, l; srand( (unsigned)time( NULL ) ); y=rand() % 2500 + 1600; m=rand() % 12 + 1; l=rand() % 29 + 1; printf("西暦%d年%d月%d日",y,m,l); return(0); }今回は乱数発生でランダムにだされた西暦年月日をつくりましたが、y=rand() % 2500 + 1600; というのがありこれはyという乱数が2500以下1600以上という意味なのですがなぜかプログラムを実行しても3000いくつとか4000いくつなんてのもでてきます。m=rand() % 12 + 1;はちゃんと12以下1以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。

  • 無限

    今、ランダムな数を無限に出すプログラムを作っています。一応 #include <stdio.h> #include <time.h> #include <stdlib.h> main () { int word,i; srand (time(NULL)); word=rand(); printf("number!!\n"); for (i=0;i<3;i--) { printf("%d\n",word); } return 0; } というかんじで作ったのですが、コンパイルして実行すると、同じ数しか出てきません。どうすればいいか教えてください。

  • 乱数について

    Visual Studio2008を使っています。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void){ int i; srand(time(NULL)); i=rand(); printf("%d\n",i); return 0; } 乱数を作るために上のようなプログラミングを作りました。 これを「ソリューションのビルド」すると 【warning C4244: '引数' : 'time_t' から 'unsigned int' への変換です。データが失われる可能性があります。】 と出ます。 このまま行っても乱数が出来るのですが どうしたらいいのでしょうか? 8行目を srand(time_t(NULL)); srand((unsigned)time(NULL)); と変えればいいのでしょうか? time_tでやると乱数が同じ値しか出てきません。 教えてください。