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 語句時,可以使用列舉。
廣告