実行例)
カードを引きますかY
SA
Total 1
カードを引きますかY
D3
Total 4
カードを引きますかY
S8
Total 12
カードを引きますかY
DQ
Total 24
21以上になりました。
このようにカードが引かれるたびに数字を足していくtotal関数を作ったのですが出力すると適当な数字が予め足されている状態ででます。
予め他の関数で作られた数字1〜13を引数としています。
どうしたらよいでしょうか??
C++
1 2#include<iostream> 3#include<cstdlib> 4 5using namespace std; 6 7int draw(void) 8{ 9 static int card[53]; 10 static int count=0; // 引いた枚数 11 12 srand(time(NULL)); // 乱数のタネ 13 int r; 14 15 do{ 16 r = rand()%52+1; //1~52の乱数 17 card[r]++; //2回目以上なら2以上 18 }while(card[r] > 1 && count < 52); 19 20 if(count > 52){ 21 r = 0; 22 } 23 24 count++; 25 26 return r; 27} 28 29void change(int n) 30{ 31 int suit, number; //スートと数字 32 33 suit = (n-1) / 13; //スートの計算 34 35 number = n - 13*suit; //数字の計算 36 37 switch(suit){ 38 case 0: cout << "S"; break; 39 case 1: cout << "H"; break; 40 case 2: cout << "D"; break; 41 case 3: cout << "C"; break; 42 } 43 44 switch(number){ 45 case 1: cout << "A"; break; 46 case 11: cout << "J"; break; 47 case 12: cout << "Q"; break; 48 case 13: cout << "K"; break; 49 default: cout << number; 50 } 51} 52 53void total(int n) 54{ 55 static int goukei; 56 57 goukei += n; 58 59 cout << "Total:"; 60 61 do{ 62 if(goukei<21){ 63 cout << goukei << endl; 64 } 65 else if(goukei == 21){ 66 cout << goukei << endl; 67 cout <<"Black Jack" << endl; 68 break; 69 } 70 }while(goukei<=21); 71 72 cout << goukei << endl; 73 cout << "21以上になりました" << endl; 74 } 75 76 77int main() 78{ 79 char check; // YかN 80 81 int number; //draw関数で引いた数字 82 83 do{ 84 cout << "カードを引きますか?(Y/N):"; 85 cin >> check; 86 if(check == 'Y'){ 87 number = draw(); 88 if(number){ // 0でなかったらカードを表示 89 change(number); // カードの数字とスートを返す 90 cout << endl; 91 } 92 else{ 93 check ='N'; 94 cout << "カードがありません。" << endl; 95 } 96 // total(number); 97 } 98 }while(check != 'N'); 99} 100 101
コードは ``` で囲みましょう
すみません。
`static int goukei;`の初期値は0ですがいったいどこの事を言っていますか?
あと、doとwhileの対応がとれていません。
「21以上になりました。」となった後の次のゲームの話ならgoukeiをクリアしていないからです。
謝らなくていいので直して欲しいのですが、この質問は、カードを引く関数とかは Giovannaaa さんがこれまでにした質問をチェックして調べて欲しいということですか?もしそうなら、面倒なので全部貼った方がいいですよ。
そこにあるものを見た感じでは、とりあえず do - while の文法が間違ってます。
全部貼らせていただきます。
貼られたコードだとgoukeiが21未満だった場合、無限ループしてgoukeiを表示するだけのコードですが…
それはどう対処すればよろしいでしょうか?
そもそもループがいらないと思いますが。
消させていただきました。
それからどうしたらよろしいでしょうか?
もしかして21を超えていた場合に、Aを1と11で切り替える処理を入れようとしてその処理がないままループだけ入れていたのでしょうか?
今回Aは1として取り扱っています。
回答2件
あなたの回答
tips
プレビュー