1. 程式人生 > >如何通過鍵盤輸入整型數給列舉變數賦值

如何通過鍵盤輸入整型數給列舉變數賦值

        在程式設計中,有時會用到由若干個有限資料元素組成的集合,如一週內的星期一到星期日七個資料元素組成的集合,由三種顏色紅、黃、綠組成的集合,一個工作班組內十個職工組成的集合等等,程式中某個變數取值僅限於集合中的元素。此時,可將這些資料集合定義為列舉型別。因此,列舉型別是某類資料可能取值的集合,如人的性別的集合{man,woman}。可如下定義:

         enum TSex{ man,woman};

         而且,列舉型別與整型常量值有一定的聯絡.。上面定義了一個名為TSex的列舉型別,它有2個元素值:man,woman。在編譯器編譯程式時,給列舉型別中的每一個元素指定一個整型常量值

(也稱為序號值)。若列舉型別定義中沒有指定元素的整型常量值,則整型常量值從0開始依次遞增。因此TSex的2個元素man,woman依次對應整型常量值0,1。但是,列舉型別有以下兩個特點:

  1. 不能用鍵盤通過"cin>>"向列舉變數輸入元素值,只能通過初始化或賦值運算子輸入。例如:
    enum TSex {man,woman} sex1=man;//定義列舉變數時進行初始化
    TSex sex2; //定義了一個TSex型別的列舉變數sex2
    sex2=man;//通過賦值運算將元素值man賦給sex2
    TSex sex3;
    cin>>sex3;//這是錯誤的,無論輸入元素值man,woman還是序號值0,1
  2. 可用"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;
        }

參考資料: