簡體   English   中英

如何在c ++中使用帶有用戶輸入的枚舉

[英]How to use enum with user input in c++

我正在制作一個簡單的石頭剪刀游戲,我需要使用枚舉數據結構。 我的問題是我無法編譯以下代碼,因為從int(userInput)到Throws(userThrow)的轉換無效。

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

救命?!

你可以這樣做:

int userInput;
std::cin >> userInput;
Throws userThrow = static_cast<Throws>(userInput);

R,P和S在技術上現在是數字的標識符(分別為0,1和2)。 您的程序現在不知道0,1和2曾經映射到字母或字符串。

相反,您必須接受輸入並手動將其與“R”,“P”和“S”進行比較,如果匹配1,則相應地設置userThrow變量。

C ++中的枚舉只是整數常量。 它們在編譯時被解析並變成數字。

您必須通過查找正確的枚舉項來覆蓋>>運算符以提供正確的轉換。 我發現鏈接很有用。

基本上你從stdin讀取一個int並使用它來構建一個Throws項目,使用Throws(val)

相反,如果你想通過將字符串作為輸入直接輸入枚舉字段的表示,那么它本身就不存在,你必須手動完成,因為,如開頭所述,枚舉名稱在編譯時就消失了時間。

試試這個:

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

由於編譯器將枚舉視為整數,因此必須匹配手動設置每個枚舉的整數以對應ASCII碼,然后將整數輸入強制轉換為枚舉。

你可以試試這個:

int userOption;
std::cin >> userOption;

如果您不想分配用戶輸入數據,只需要檢查然后使用下面的代碼

Throws userThrow = static_cast<Throws>(userOption);

如果要在Enum中分配userinput,請使用以下代碼

Throws R = static_cast<Throws>(userOption);

在這里根據需要選擇R或P或S.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM