C++で星座おみくじを作成する方法

このQ&Aのポイント
  • C++を使用して、生年月日を入力すると星座を表示するプログラムを作成したいです。
  • さらに、1から9までの数字を入力するとランダムなおみくじの結果を表示する機能も追加したいです。
  • 現在のコードにはいくつかのエラーがあり、乱数の使い方が分からないため、アドバイスを求めています。
回答を見る
  • ベストアンサー

c++ visual 2008 星座おみくじ

#include "stdafx.h" #include "stdlib.h" int _tmain(int argc, _TCHAR* argv[]) { Int y,m,d; while(swgo!=0) { printf("生年月日を入力してください\n"); printf("年=") ; scanf_s("%d",&y) ; printf("月=") ; scanf_s("%d",&m) ; printf("日=") ; scanf_s("%d",&d) ; printf("[%d年%d月%d日]\n",y,m,d) ; printf("\n"); if(m*100+d=>0321 && m*100+d=<0419 ) printf("牡羊座\n"); if(m*100+d =>0420 && m*100+d=<0520 ) printf("牡牛座\n"); if(m*100+d =>0521 && m*100+d=<0621 ) printf("双子座\n"); if(m*100+d =>0622 && m*100+d=<0722 ) printf("蟹座\n"); if(m*100+d =>0723 && m*100+d=<0822 ) printf("獅子座\n"); if(m*100+d =>0823 && m*100+d=<0922 ) printf("乙女座\n"); if(m*100+d =>0923 && m*100+d=<1023 ) printf("天秤座\n"); if(m*100+d =>1024 && m*100+d=<1121 ) printf("蠍座\n"); if(m*100+d =>1122 && m*100+d=<1221 ) printf("射手座\n"); if(m*100+d =>1222 && m*100+d=<0119 ) printf("山羊座\n"); if(m*100+d =>0120 && m*100+d=<0218 ) printf("水瓶座\n"); if(m*100+d =>0219 && m*100+d=<0320 ) printf("魚座\n"); } while(jsw==1) printf("\n==終了ならを、継続なら1を入力してください=");sacnf_s("%d",&swgo); long s; unsigned int randmx; int rj; randmx=32767; s=12357; srand(s); for(i=1;i<=imax;i++){ rj=rand()*6.0/((float) randmx)+1; printf("%5d",rj); if(i&10==0) printf("\n"); rj=1 大吉 rj=2 中吉 rj=3 小吉 rj=4 末吉 rj=5 小凶 rj=6 末吉 rj=7 小凶 rj=8  中凶 rj=9 大凶 return 0; } 一応 考えて見て打ってみたのですが、エラーが出でしまい出来ません。 自分でもこれでは駄目だとわかります。特に乱数の使い方がわかりません。  何をしたいかと言うと 星座おみくじを作りたいのです。  生年月日を入れてくださいという画面が出て 生年月日を入れたら 星座が出て、 1-9の好きな数を入れてくださいと画面が表示され 数字を入れたら ランダムで おみくじの結果を出すプログラムを作りたいです。   どなたか アドバイスください。 よろしくお願いします。

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

  • ベストアンサー
  • LOHA
  • ベストアンサー率52% (203/388)
回答No.1

>エラーが出でしまい出来ません。 エラーというのは一番の解決の糸口です。 ですので、質問の際にはエラーを(ちょっと長くても)コピペするのが正解です。 とりあえず脳内コンパイルしてみます。 >#include "stdafx.h" この中にstdio.hとかtchar.hがincludeされてるのかな? stdafx.hの中身も示したほうが良いかと思います。 >Int y,m,d; Iが大文字になっています。 >while(swgo!=0) swgoとは何でしょう? >scanf_s("%d",&y) ; scanf_sの使い方がまずそうです。 http://msdn.microsoft.com/ja-jp/library/w40768et(v=vs.80).aspx >if(m*100+d=>0321 && m*100+d=<0419 ) printf("牡羊座\n"); 数値の先頭に0をつけると8進数として扱われます。なので今回のケースではつけてはいけません。 それと演算子が間違っています。<=と>=が正解です。 >while(jsw==1) >printf("\n==終了ならを、継続なら1を入力してください=");sacnf_s("%d",&swgo); jswとは? それとこれだとprintfを無限ループで実行することになります。ちゃんと{}で囲みましょう。 >for(i=1;i<=imax;i++){ iとimaxが宣言されていない気がする。 あとforの閉じ中括弧がありません。 >rj=rand()*6.0/((float) randmx)+1; randmxなどとして自分で用意する必要はありません。というか処理系によってかわるので、乱数の最大値はRAND_MAXを利用しましょう。 >if(i&10==0) printf("\n"); 文法的には問題ないですが、これはどういう意図なのでしょう? >rj=1 大吉 ここからは完全に謎ですね。 こんなところでしょうか? >特に乱数の使い方がわかりません。 乱数の使い方はそこまで間違ってはいない気がします。 ここら辺を読んで基礎から勉強しましょう。 http://9cguide.appspot.com/

zeronew
質問者

お礼

参考になりました。 演算子が間違っていたのを気づきませんでしたありがとうございます。

関連するQ&A

  • C言語【おみくじプログラム】

    お正月前にならったばかりのC言語を用いて おみくじプログラムを作りました。 最近それをまた改良して 強制的にくじを引かせるものにしようと考えました。 しかしどうしてもwhileのループから抜け出せないので ここで質問させていただきます。 どうか間違っている部分を教えてください。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 7 int main(){ int k,y,n; printf("ようこそ。\n"); printf("ここではおみくじを販売して折ります。\n"); printf("よろしければ運試しをしていって下さい。\n\n"); printf("おみくじを引きますか?\n"); printf("※引く場合はy,引かない場合はnを入力してください\n"); scanf("%s,&k"); if(k!=y){ while(k=y){ printf("そんなこと言わずに引いてみてくださいよ。\n\n"); printf("おみくじを引きますか?\n"); printf("※引く場合はy,引かない場合はnを入力してください\n"); scanf("%s,&k"); } } char *kuji[N] = {"大吉", "中吉", "小吉","末吉", "吉", "凶","大凶"}; srand((unsigned)time(NULL)); printf("おみくじ: %s\n\n\n", kuji[rand() % N]); printf("結果はどうでしたか?\n"); printf("またのお越しをお待ちしております。\n"); return 0; }

  • おみくじプログラムですがじっこうできません。

    #include<stdio.h> int main() { int i; char data[5][10]={"大吉","小吉","吉","凶","大凶"}; printf("1~5の間の整数を入力:"); scanf("%d",&i); while(i<1&&i>5){ printf("入力値が不適切です。\n"); printf("1~5でお願いします。\n"); scanf("%d",&i); } printf("%s\n",data[5][i-1]); return 0; } 自分で考えてみたのですが、どうしたらいいかわかりません。

  • (C言語)西暦年月日を入力して、その日の曜日を表示させるプログラムを試したのですが…

    西暦年月日を入力して、その日の曜日を表示させるプログラムを作りたいのですが、とりあえず、やってみましたが… int main(void) { int i,y,m,d,dy,dw; int D[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; printf("Year?"); scanf("%d",&y); printf("Month?"); scanf("%d",&m); printf("Day?"); scanf("%d",&d); for(i=0;i<=m-1;i++){ dy = d + D[i] ; } if(m>=3){ if(y % 4 == 0){ if(y % 400 == 0){ dy = dy + 1 ; } else if(y % 100 ==0){ dy = dy ; } else{ dy = dy + 1 ; } } else if(y % 4 == 1 || y % 4 == 2 || y % 4 == 3 ){ dy = dy ; } } dw = (dy -1 + ( y + ( y - 1 )/4 - ( y - 1 )/100 + ( y - 1 )/400))%7 ; if (dw == 0) printf("Sunday\n"); else if (dw == 1) printf("Monday\n"); else if (dw == 2) printf("Tuesday\n"); else if (dw == 3) printf("Wednesday\n"); else if (dw == 4) printf("Thursday\n"); else if (dw == 5) printf("Friday\n"); else if (dw == 6) printf("Saturday\n"); return 0 ; } このプログラムを各年の1月1日~2月28日で試してみると、うまくいくのですが、3月1日に入るとなぜかうまく働いてくれません。(ちなみに2005年の11月では偶然うまくいっています。)その理由が分からないのでどなたか教えてください。ちなみに、この一連のプログラムを行うにはもっと簡単に行える関数というかコマンド?みたいなものがあるようですが、基本的に各年の1月1日を、 (y+(y-1)/4-(y-1)/100+(y-1)/400)%7で(0:Sunday~)、同年の○月○日は1月1日から△日経過しているという考え方で、曜日を割り出すプログラムにしなければならないといけないので、注文が多いですがよろしくお願いします。

  • C言語について プログラムが動きません

    ゲームのプログラムを作りたいものです。 今、試作の途中の段階で以下のようなプログラムを作ってみたのですが、 コアダンプが表示されてうまく起動しません。 どの点を変更すればいいのか、教えてください。 使っている言語はC言語です。 よろしくお願いいたします。 #include <stdio.h> #include <string.h> struct monster{ int type; /* タイプ */ char trick[25]; /* 技 */ char trick2[25]; /* 技2 */ int tricktype; /* 技1のタイプ */ int tricktype2; /* 技2のタイプ */ int trickeffect; /* 技1の威力 */ int trickeffect2; /* 技2の威力 */ char name[10]; /* 名前 */ int attack; /* 攻撃力 */ int diffence; /* 防御力 */ int speed; /* 素早さ */ /* 1,fire 2,water 3,nature 4,thunder 5,wind */ }; char names[5][10] = {"v", "w", "x", "y", "z"}; main(){ int s = 0; int a[3]; int i; int m; struct monster monster[5] = { { 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60}, { 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60}, { 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60}, { 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60}, { 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60}, }; printf("好きなモンスターを3つ選んでください\n\n"); while (s < 1){ for (i = 0; i++; i<3){ printf("%d体目を選んでください。\n\n", i+1); for(m = 0; m++; m < 4) printf("%d, %s\n", m+1, monster[m].name); printf("5, %s\n\n", monster[4].name); scanf("%d", a[i]); printf("%d体目 : %s\n\n", i+1, monster[a[i]-1].name); } printf("これでよろしいですか?\n"); for(i = 0; i++; i<2) printf("%d体目 : %s ", i+1, monster[a[i]-1].name); printf("3体目 : %s\n\n", monster[a[2]-1].name); printf("1、はい 2、いいえ\n"); scanf("%d", &i); if(i=1) return s = 1; else return s = 0; } }

  • C言語の問題がわからないです。

    C言語のプログラムで、列数を自分で決めて、 (例)3列         ●(この行を最後として)   □● ●□● 上記のプログラムを作りたいのですが、 上手くいきません。途中まで作ったのですが、なかなか思うようにいかないです。どうすれば上記のようになりますでしょうか? #include <stdio.h> void disp(int x, int y); main() { int i,n; printf("表示する列:"); scanf("%d",&n); disp(3,3); for(i=1;i<=n;i++){ if(i%2==0){ disp(n-i,4); disp(i,2); } else{ disp(n-i,4); disp(i,1); } disp(1,3); } } void disp(int x, int y) { int i; for(i=0;i<x;i++){ if(y==1){ printf("●"); } else if(y==2){ printf("□"); } else if(y==3){ printf("\n"); } else{ printf("\0"); } } }

  • C言語でmからnまでの合計を求めるプログラム

    これで動かないのですが、何が違っているのか、教えていただけますか。 #include <stdio.h> int main(void) { int m, n, sum, i, w ; printf("mからnまでの合計を求めます\n\n"); printf("m >> "); scanf(" %d", &m); printf("n >> "); scanf(" %d", &n); sum=0; if(m>n){ w=m; m=n; n=w; } sum=0; i=m; while(i<=n){ sum=sum+i; i=i+1; } printf("%d から %d の合計 = %d\n",m,n,sum); return 0; }

  • 万年カレンダー

    万年カレンダーの日にちが、一日ずれて表示されますのでその原因を教えてください。 void main() { int nen,tuki,niti; int ff,i,n; int carender[6][7]; niti=0; for(i=0;i<6;i++)for(n=0;n<7;n++) carender[i][n]=0; printf("西暦(4桁)→"); scanf("%d",&nen); printf("month:"); scanf("%d",&tuki); ff=youbi_chk(nen,tuki,1); for(i=ff;i<7;i++) {carender[0][i]=niti;++niti;} for(n=1;n<6;n++){ for(i=0;i<7;i++){ if(niti<=niti_chk(tuki,nen)) {carender[n][i]=niti;++niti;}} } printf(" SUN MON TUE WED THU FRI SAT\n"); for(n=0;n<6;n++){ for(i=0;i<7;i++) if(carender[n][i]==0)printf(" ");else printf("%4d",carender[n][i]); printf("\n");} } int youbi_chk(int y,int m,int d) { int youbi; if(m<3) {y--; m+=10;} else {m-=2;} youbi=(y+(y/4)-(y/100)+(y/400)+(13*m-1)/5+d)%7; return youbi; } int uru_chk(int y) { if(y%400==0) return 1; if(y%100==0) return 0; if(y%4==0) return 1; return 0; } int niti_chk(int m,int y) { int hi[12]={31,28,31,30,31,30,31,31,30,31,30,31}; hi[1]+=uru_chk(y); return hi[m-1]; } プロトタイプ宣言は、省いてます。

  • C言語での構造体

    C言語の構造体で配列を扱うとき、 struct ○○{  char ○○[○] とすれば出来ますが、同じようにして構造体で二次元配列を扱うことは出来ますか? 一度組んでみたのですが、 #include<stdio.h> struct aaa{ int no; char name[128]; char y_name[128]; char n_name[128]; char s_name[128][128]; }; int main(void){ int i; struct aaa iryo[99]; printf("入力前\n"); /* 構造体配列に scanf()でデータを入力 */ for(i = 0; i < 3; i++) { // printf("input...\n"); scanf("%d", &iryo[i].no); scanf("%s", iryo[i].name); scanf("%s", iryo[i].y_name); scanf("%s", iryo[i].n_name); scanf("%s", iryo[i].s_name); } printf("入力後\n"); printf("出力前\n"); /* 入力データの確認 */ for(i = 0; i < 3; i++) { printf("番号:%02d 内容:%s Y分岐:%s N分岐:%s 他分岐:%s\n", iryo[i].no, iryo[i].name, iryo[i].y_name, iryo[i].n_name, iryo[i].s_name); } printf("出力後\n"); printf("%d",sizeof(struct aaa)); return 0; } としたら、エラーは出ませんが、実行すると何も表示されませんでした。

  • 覆面算 C(2)

    このプログラミングの何が違うんでしょうか? どなたか教えてください。 #include <stdio.h> int main(void){ int D,A,Y,R,E,M,Z,U,I; for(D=1; D<10; D++){ for(A=0; A<10; A++){ if(A!=D){ for(Y=0; Y<10; Y++){ if(Y!=D && Y!=R && Y!=E && Y!=A && Y!=M){ for(I=1; I<10; I++){ if(I!=D && I!=A && I!=Y){ for(Z=0; Z<10; Z++){ if(Z!=D && Z!=A && Z!=Y && Z!=R && Z!=E && Z!=M && Z!=U && Z!=I){ if((D*100+A*10+Y)+D*10000+R*1000+E*100+A*10+M == I*10000+Z*1000+U*100+M*10+I){ printf("%d%d%d\n",D,A,Y); printf("%d%d%d\n",D,R,E,A,M); printf("-------\n"); printf("%d%d%d\n",I,Z,U,M,I); printf("-------\n"); break; } } } } } } } } } } return 0; }

  • Cがうまく動かないのですが

    20個の整数をキーボードから読み込んでそれらの整数を一の位の数字が0のもの、1ものもという風に9まで分類してヒストグラムを作りたいのですがうまくいきません。アスタリスクを書く部分のfor文が回っていないよのまではわかったのですが…。以下の部分まではできましたが、どこをなおせばよいでしょうか?さっぱりわからなくて困っています。 初歩的な質問だと思いますがよろしくお願いします。 因みにヒストグラム部分は 0 |** 1 |* という感じに出力させたいのですが…。 #include <stdio.h> main() { int i,n,m,s; int a[10]; for(m=0; m<10; m++){ a[m]=0; } for(i=0; i<20; i++){ printf("input integer: "); scanf("%d",&n); a[n%10]=a[n%10]++; } printf("histogram\n"); printf("--------------\n"); for(m=0; m<10; m++){ printf("%d |",m); for(s=0; s<a[m]; s++){ printf("*"); } printf("\n"); } }

専門家に質問してみよう