
- C程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境設定
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof 運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if 語句
- C - if...else 語句
- C - 巢狀 if 語句
- C - switch 語句
- C - 巢狀 switch 語句
- C語言中的迴圈
- C - 迴圈
- C - while 迴圈
- C - for 迴圈
- C - do...while 迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break 語句
- C - continue 語句
- C - goto 語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指向指標的指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void 指標
- C - 懸空指標
- C - 解引用指標
- C - 近指標、遠指標和巨指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點(.)運算子
- C - 列舉(或 enum)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C語言中的檔案處理
- C - 輸入 & 輸出
- C - 檔案 I/O(檔案處理)
- C 預處理器
- C - 預處理器
- C - 編譯指示
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言中的列舉(或enum)
C語言中的列舉(或enum)
C 列舉(enum)是一種列舉資料型別,它包含一組整型常量。列舉在您想要為整型常量分配使用者定義的名稱時非常有用。enum 關鍵字用於定義列舉。
定義和宣告列舉型別
要宣告和定義列舉(enum)資料型別,請使用enum關鍵字後跟列舉名稱,並在花括號內分配所有值。
語法
這是您用於定義列舉型別的語法:
enum enum_name{const1, const2, ... };
列舉變數宣告
宣告列舉型別後,您還可以宣告其變數以訪問列舉成員(常量)。要宣告列舉變數,請編寫enum關鍵字後跟列舉名稱(enum_name),然後是變數名稱(var)。
語法
以下是宣告列舉型別變數的語法:
enum enum_name var;
示例
讓我們定義一個名為myenum的列舉型別:
enum myenum {val1, val2, val3, val4};
識別符號值是無符號整數,它們從“0”開始。val1 指的是 0,val2 指的是 1,依此類推。
myenum型別的變數宣告如下:
enum myenum var;
myenum型別的可能常數值在花括號內列舉。
更改列舉常數值
當我們宣告列舉型別時,列舉的第一個常量預設初始化為 0,第二個常量初始化為 1,依此類推。我們還可以為列舉的任何常量分配任何整數值。
示例
在下面的示例中,我們正在宣告列舉型別並將不同的值分配給列舉常量。
#include <stdio.h> enum status_codes { OKAY = 1, CANCEL = 0, ALERT = 2 }; int main() { // Printing values printf("OKAY = %d\n", OKAY); printf("CANCEL = %d\n", CANCEL); printf("ALERT = %d\n", ALERT); return 0; }
輸出
它將產生以下輸出:
OKAY = 1 CANCEL = 0 ALERT = 2
在 switch 語句中使用列舉
C 語言 switch case 語句 使用整數值。我們可以使用列舉型別來定義帶有(或不帶)整數值的常量,以便在 switch case 語句中使用它們。
示例
在下面的示例中,彩虹中的顏色被列舉。
#include <stdio.h> // Enum declaration enum colors { VIOLET, INDIGO, BLUE, GREEN, YELLOW, ORANGE, RED }; int main() { // Enum variable declaration enum colors color = YELLOW; // switch statement using enum switch (color) { case BLUE: printf("Blue color"); break; case GREEN: printf("Green color"); break; case RED: printf("Red color"); break; default: printf("Color other than RGB"); } return 0; }
輸出
執行程式碼並檢查其輸出:
Color other than RGB
列舉(enum)型別的示例
練習以下示例以瞭解 C 程式語言中列舉(或 enum)型別的概念。
示例 1:列舉常量獲取遞增的整數值
C 將遞增的整數值分配給每個常量,從“0”開始。當我們將val2分配給上述變數時,
var = val2;
分配給val2的整數值為 1。請檢視以下示例:
#include <stdio.h> enum myenum {val1, val2, val3, val4}; int main(){ enum myenum var; var = val2; printf("var = %d", var); return 0; }
輸出
它將產生以下輸出:
var = 1
示例 2:列舉工作日
讓我們宣告一個列舉型別weekdays來列舉日期名稱並將其值分配給列舉型別變數:
#include <stdio.h> int main(){ enum weekdays {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; printf ("Monday = %d\n", Mon); printf ("Thursday = %d\n", Thu); printf ("Sunday = %d\n", Sun); }
輸出
它將產生以下輸出:
Monday = 1 Thursday = 4 Sunday = 0
示例 3:宣告列舉型別變數
列舉資料型別的典型應用是將工作日分配給整數值。在此程式碼中,我們聲明瞭一個weekdays列舉型別的變數:
#include <stdio.h> enum weekdays {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; int main(){ enum weekdays day; day = Wed; printf("Day number of Wed is = %d", day); return 0; }
輸出
當您執行此程式碼時,它將產生以下輸出:
Day number of Wed is = 3
示例 4:列舉值預設從“0”開始
在此程式碼中,我們為日曆年中月份的名稱定義了一個列舉型別。預設情況下,C 將從“0”開始分配值。例如,在以下 C 程式中,Jan 獲取值“0”,Feb 獲取“1”,依此類推。
#include <stdio.h> enum months{Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; int main(){ for (int i = Jan; i <= Dec; i++) printf("Month No: %d\n", i); return 0; }
輸出
執行程式碼並檢查其輸出:
Month No: 0 Month No: 1 Month No: 2 Month No: 3 Month No: 4 Month No: 5 Month No: 6 Month No: 7 Month No: 8 Month No: 9 Month No: 10 Month No: 11
示例 5:從 1 開始列舉
要從 1 開始列舉,請顯式地將 1 分配給第一個值,編譯器將為後續值分配遞增的數字。
#include <stdio.h> enum months{Jan=1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; int main(){ for (int i = Jan; i <= Dec; i++) printf("Month No: %d\n", i); return 0; }
輸出
執行程式碼並檢查其輸出:
Month No: 1 Month No: 2 Month No: 3 Month No: 4 Month No: 5 Month No: 6 Month No: 7 Month No: 8 Month No: 9 Month No: 10 Month No: 11 Month No: 12
示例 6:列舉 HTTP 狀態程式碼
列舉型別中的常量不必具有遞增的整數值。您可以為每個常量分配一個不同的唯一值,這些值可以按任何順序排列。
在以下程式碼中,列舉型別枚舉了HTTP 狀態程式碼。
#include <stdio.h> enum status { OK = 200, BadRequest = 400, Unauthorized = 401, Forbidden = 403, NotFound = 404, InternalServerError = 500, }; int main(){ enum status code = InternalServerError; if (code == 500) printf("Internal Server Error has been encountered"); return 0; }
輸出
執行程式碼並檢查其輸出:
Internal Server Error has been encountered
示例 7:為列舉常量分配固定數字
您可以為某些常量分配固定整數,讓編譯器為其他常量分配值。所有未分配的名稱都將獲得“前一個名稱的值加一”的值。
#include <stdio.h> enum myenum {a, b = 5, c, d, e = 10, f}; int main(){ printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", c); printf("d: %d\n", d); printf("e: %d\n", e); printf("f: %d\n", f); return 0; }
輸出
執行程式碼並檢查其輸出:
a: 0 b: 5 c: 6 d: 7 e: 10 f: 11
列舉的應用
我們可以在 C 中的不同情況下使用列舉,其中一些列在下面:
- 儲存常數值,例如工作日、月份、方向、顏色等。
- 列舉用於使用標誌、狀態程式碼等。
- 在 C 中使用 switch-case 語句時,可以使用列舉。