如何通過鍵盤輸入整型數給列舉變數賦值
阿新 • • 發佈:2019-02-20
在程式設計中,有時會用到由若干個有限資料元素組成的集合,如一週內的星期一到星期日七個資料元素組成的集合,由三種顏色紅、黃、綠組成的集合,一個工作班組內十個職工組成的集合等等,程式中某個變數取值僅限於集合中的元素。此時,可將這些資料集合定義為列舉型別。因此,列舉型別是某類資料可能取值的集合,如人的性別的集合{man,woman}。可如下定義:
enum TSex{ man,woman};
而且,列舉型別與整型常量值有一定的聯絡.。上面定義了一個名為TSex的列舉型別,它有2個元素值:man,woman。在編譯器編譯程式時,給列舉型別中的每一個元素指定一個整型常量值 (也稱為序號值)。若列舉型別定義中沒有指定元素的整型常量值,則整型常量值從0開始依次遞增。因此TSex的2個元素man,woman依次對應整型常量值0,1。但是,列舉型別有以下兩個特點:
- 不能用鍵盤通過"cin>>"向列舉變數輸入元素值,只能通過初始化或賦值運算子輸入。例如:
enum TSex {man,woman} sex1=man;//定義列舉變數時進行初始化
TSex sex2; //定義了一個TSex型別的列舉變數sex2
sex2=man;//通過賦值運算將元素值man賦給sex2
TSex sex3;
cin>>sex3;//這是錯誤的,無論輸入元素值man,woman還是序號值0,1 - 可用"cout<<"輸出列舉變數,但輸出的是元素對應的序號值,而不是元素值。例如
cout<<sex1<<endl;//輸出的是sex1元素man對應的序號值0,而不是元素man。
雖然不能通過鍵盤直接給列舉變數輸入元素值,但是可以將輸入的整型常量值強制轉換後賦給列舉變數。例如,定義一個性別的列舉型別,通過鍵盤設定性別,並輸出。
方法1:通過符號(int &)
#include <iostream> using namespace std; int main() { enum TSex {man,woman};//定義列舉型別TSex TSex sex; //定義列舉變數sex cout<<"輸入0或1:0代表man,1代表woman"<<endl; cin>>(int &)sex; //通過整型引用給sex賦值 switch(sex) //通過switch迴圈輸出性別 { case man:cout<<"man"<<endl;break; //不能寫成cout<<sex,因為它只會輸出序號值0或1 case woman:cout<<"woman"<<endl;break; default:cout<<"性別輸入錯誤"<<endl;break; } return 0; }
方法2:通過列舉型別(enum TSex)
#include <iostream>
using namespace std;
int main()
{
enum TSex {man,woman};//定義列舉型別TSex
TSex sex; //定義列舉變數sex
int gender;//定義臨時變數gender,用於儲存輸入的序號值
cout<<"輸入0或1:0代表man,1代表woman"<<endl;
sex=(enum TSex)gender ; //強制轉換
switch(sex) //通過switch迴圈輸出性別
{
case man:cout<<"man"<<endl;break;
case woman:cout<<"woman"<<endl;break;
default:cout<<"性別輸入錯誤"<<endl;break;
}
return 0;
}
參考資料: