[英]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.