C++プログラム、アドバイス下さい。
今回C++の基本をある程度覚えたので、
C言語の知識と合わせて占いプログラムを作成してみました。
コンソールアプリケーションですがC++の基本なので勘弁してください。
・プログラム概要
まず起動し、yesを入力で数字選び、
noでプログラム終了。
yesを入力した後数字を選んで、
乱数で占いの結果を分岐して表示。
ラッキーカラー関数でラッキーカラーを表示
最後にnoを押すと終了、それ以外を押すとループ。
一度ループするとループ回数が1カウントされる。
・問題点
ラッキーカラー関数からラッキーカラーを受け取るとき、
うまくいかない。
hanteiに文字を代入するときが間違っていると思います。
下のプログラムソース見て、解決策がある方教えていただきたいです。
占いソフトをアップしておきます。
ダウンロードパスワードは「mudaissozai」。
//くじ引きプログラムテスト
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
char *rakkycolor(char *hantei){//ラッキーカラー関数
int color;
srand((unsigned int) time(0));
color = 1 + (int) (rand() * 12.0 / (1.0 + RAND_MAX));
switch(color)
{
case 1 :
hantei[1] = '赤';
return hantei;
break;
case 2 :
hantei[1] = '青';
return hantei;
break;
case 3 :
hantei[1] = '緑';
return hantei;
break;
case 4 :
hantei[1] = '黄';
return hantei;
break;
case 5 :
hantei[1] = '水';
return hantei;
break;
case 6 :
hantei[1] = '朱';
return hantei;
break;
case 7 :
hantei[1] = '橙';
return hantei;
break;
case 8 :
hantei[1] = '黒';
return hantei;
break;
case 9 :
hantei[1] = '灰';
return hantei;
break;
case 10 :
hantei[1] = '茶';
return hantei;
break;
case 11 :
hantei[1] = '金';
return hantei;
break;
case 12 :
hantei[1] = '銀';
return hantei;
break;
default :
hantei[1] = 'E';
hantei[2] = 'R';
return hantei;
break;
}
return 0;
}
int main()
{
int hakosu;
int mozilong;
char yesno[4];//やるかやらないか判定
int returnnum; //繰り返し回数
char hantei[10];
returnnum = 1;//繰り返し数の初期値
cout << "占いプログラムです。占いをしますか?yesでプレイ、noで終了。" << endl;
cin >> yesno;
if(strcmp(yesno, "yes") == 0)//第一if開始 yesだったら反復開始
{
do //占いの反復 最後にendが入力されるまでループ
{
srand((unsigned int) time(0));
cout << "1~10の数字があります、数字を選択!" << endl;
cin >> hakosu;
if((hakosu >= 1) && (hakosu <= 10))//rand
{
hakosu = 1 + (int) (rand() * 10.0 / (1.0 + RAND_MAX));
switch(hakosu)
{
case 1 :
cout << "今日は何をやってもハッピーな一日となるでしょう。" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 2 :
cout << "運動をして健康を維持しましょう。" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 3 :
cout << "食事の栄養バランスに気をつけてください。" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 4 :
cout << "勉強がとてもはかどります。" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 5 :
cout << "恋愛運が高めです。" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 6 :
cout << "金運が高いです。おこずかいがもらえるかも。" << endl
<< "ラッキーカラーは" << hantei << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 7 :
cout << "今日は普通みたいです。特に何も起こらないでしょう。" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 8 :
cout << "落とし穴注意(いろんな意味でね。)" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 9 :
cout << "目立つ行動を避けましょう。" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
case 10 :
cout << "今日は何をやっても駄目でしょう。家でゆっくりするのがお勧め。" << endl
<< "ラッキーカラーは" << rakkycolor(hantei) << "です。"
<< endl << "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
default :
cout << "1~10を入力してください。" << endl
<< "現在連続" << returnnum << "回目" << endl
<< "終了するなら「no」を入力、リスタートは他の文字を入力" << endl;
cin >> yesno;
break;
}
}
else//randelse
{
cout << "1~10を入力してください。" << endl;
}
returnnum++;
}while(strcmp(yesno, "no") != 0);//do~while文のエンド
}//第一if終了
if(strcmp(yesno, "no") == 0)//第二if開始
{
cout << "noを選んだので終了します。" << endl;
}//第二if終了
if((strcmp(yesno, "yes") != 0) && (strcmp(yesno, "no") != 0))
{
cout << "エラーです\nyesかnoで答えてください。";
}
return 0;
}