4

シンプルなじゃんけんゲームを作成しており、列挙データ構造を使用する必要があります。私の問題は、int (userInput) から Throws (userThrow) への変換が無効なため、次のコードをコンパイルできないことです。

enum Throws {R, P, S};
int userInput;
cout << "What is your throw : ";
cin >> userInput;
Throws userThrow = userInput;

ヘルプ?!

4

6 に答える 6

7

次のように実行できます。

int userInput;
std::cin >> userInput;
Throws userThrow = static_cast<Throws>(userInput);
于 2016-03-07T12:07:40.390 に答える
2

R、P、および S は、技術的には数値の識別子 (それぞれ 0、1、および 2) になりました。プログラムは、0、1、および 2 が文字または文字列にマップされたことを認識していません。

代わりに、入力を取得して手動で「R」、「P」、および「S」と比較し、一致する場合はそれuserThrowに応じて変数を設定する必要があります。

于 2012-10-12T20:38:57.323 に答える
1

これを試してください:

enum Throws {R = 'R', P = 'P', S = 'S'};
char userInput;
cout << "What is your throw : ";
cin >> userInput;
Throws userThrow = (Throws)userInput;
于 2012-10-12T20:58:22.027 に答える
1

列挙型はコンパイラによって整数として扱われるため、ASCII コードに対応するように各列挙型の整数を手動で設定し、整数入力を列挙型にキャストする必要があります。

于 2012-10-12T21:11:28.307 に答える
1

C++ の列挙型は単なる整数定数です。それらはコンパイル時に解決され、数値に変換されます。

>>正しい列挙項目を探して正しい変換を行うには、演算子をオーバーライドする必要があります。このリンクは便利だと思いました。

基本的に、stdin から int を読み取り、それを使用して を使用してThrowsアイテムを作成しますThrows(val)

代わりに、文字列を入力として配置して enum フィールドの表現を直接入力したい場合は、それ自体は存在しません。最初に述べたように、enum 名はコンパイル時に消えるため、手動で行う必要があります。時間。

于 2012-10-12T20:40:10.187 に答える
0

これを試すことができます:

int userOption;
std::cin >> userOption;

ユーザー入力データを割り当てたくない場合は、確認したいだけで、以下のコードを使用してください

Throws userThrow = static_cast<Throws>(userOption);

列挙型にユーザー入力を割り当てたい場合は、次のコードを使用します

Throws R = static_cast<Throws>(userOption);

ここでは、必要に応じて R または P または S を選択します。

于 2017-10-29T11:35:18.760 に答える