実現したいこと
52行のトランプカードからユーザーがinputした行のトランプカードを抜き出し表示するプログラムを作っています。
Ace Spade
Ace Heart
Ace Diamond
Ace Club
2 Spade
2 Heart
2 Diamond
2 Club
3 Spade
3 Heart
3 Diamond
3 Club
4 Spade
4 Heart
4 Diamond
4 Club
5 Spade
5 Heart
5 Diamond
5 Club
6 Spade
6 Heart
6 Diamond
6 Club
7 Spade
7 Heart
7 Diamond
7 Club
8 Spade
8 Heart
8 Diamond
8 Club
9 Spade
9 Heart
9 Diamond
9 Club
10 Spade
10 Heart
10 Diamond
10 Club
Jack Spade
Jack Heart
Jack Diamond
Jack Club
Queen Spade
Queen Heart
Queen Diamond
Queen Club
King Spade
King Heart
King Diamond
King Club
例えば、ユーザーが1と入力したら上から一番目の
Ace Spade
が表示され、ユーザーが10と入力したら上から数えて10番目の
3 Heart
が表示されます。
ユーザーが1と入力したら
Ace Spade
と表示されるんですが、
ユーザーが10と入力しても、1以外の数字を入力しても
Ace Spade
と表示されます
下記のコードのどこを変更すれば良いでしょうか?
該当のソースコード
C++
1#include <string> 2#include <stdexcept> 3#include <iostream> 4#include <iomanip> 5#include <fstream> 6#include <limits> 7 8using namespace std; 9 10class Card { 11public: 12 enum class Suit { Spade, Heart, Diamond, Club}; 13private: 14 int number; 15 Suit suit; 16public: 17 Card (int n = 0, Suit s = Suit(-1)) : number(n), suit(s) {} 18 int getNumber() const { 19 if ( number < 1 || number > 13 ) throw range_error("bad Number"); 20 return number; 21 } 22 Suit getSuit() const { 23 if ( int(suit) < 0 || int(suit) > 3 ) throw range_error("bad Suit"); 24 return suit; 25 } 26 string description() const; 27}; 28 29string to_string(const Card::Suit& s) { 30 switch ( s ) { 31 case Card::Suit::Spade : return "Spade \n"; 32 case Card::Suit::Heart : return "Heart \n"; 33 case Card::Suit::Diamond : return "Diamond\n"; 34 case Card::Suit::Club : return "Club \n"; 35 } 36 return string(); 37} 38 39string Card::description() const { 40 static const char* nums[] = { " Ace", " 2", " 3", " 4", " 5", 41 " 6", " 7", " 8", " 9", " 10", 42 " Jack", "Queen", " King" }; 43 return string(nums[getNumber()-1]) + " " + to_string(getSuit()); 44} 45 46const int LINE = 52; 47 48int main() { 49 char buffer[LINE]; 50 51 fstream myFile; 52 myFile.open("lab.txt"); 53 54 Card deck[13][4]; 55 for ( int i = 0; i < 13; ++i ) { 56 for ( int j = 0; j < 4; ++j ) { 57 deck[i][j] = Card(i+1,Card::Suit(j)); 58 } 59 } 60 61 for ( auto& row : deck ) { 62 for ( auto& card : row ) { 63 cout << setw(16) << card.description(); 64 myFile << setw(16) << card.description(); 65 } 66 } 67 68 myFile.close(); 69 70 fstream myFile2; 71 myFile2.open("lab.txt"); 72 73 cout << "Enter a number: "; 74 int num; 75 cin >> num; 76 77 string str; 78 79 for(int i = 0; i < LINE - 1; i++) { 80 myFile2.clear(); 81 myFile2.seekg(0, ios::beg); 82 83 while(getline(myFile2, str)) { 84 myFile2 >> num; 85 } 86 } 87 cout << str; 88 89 myFile2.close(); 90 91 system("pwd"); 92 93 return 0; 94}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。