逍遙自在學C語言 | 列舉的那些事兒

2023-06-09 06:01:36

前言

在C語言中,列舉是一種方便組織和表示一組相關常數的工具。列舉型別有助於提高程式碼的可讀性和可維護性。本文將介紹C語言列舉的基本概念、語法和用法,以及一些高階技巧。

一、人物簡介

  • 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。

  • 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。

二、基本概念

列舉型別由enum關鍵字引入,並由一組常數構成。每個常數都稱為列舉常數,它們在列舉中按順序自動賦予整數值。

enum Season {
    SPRING,   // 0
    SUMMER,   // 1
    AUTUMN,   // 2
    WINTER    // 3
};

在上述範例中,我們定義了一個名為Season的列舉型別,幷包含四個常數:SPRINGSUMMERAUTUMNWINTER

它們的預設值分別為0、1、2和3。

三、使用列舉常數

我們可以使用列舉常數來宣告變數,併為其賦予列舉中的某個值。

enum Season currentSeason = SUMMER;

在上述範例中,我們宣告了一個名為currentSeason的變數,並將其賦值為SUMMER

這樣,我們就可以通過變數currentSeason來參照列舉常數。

四、比較和判斷列舉常數

我們可以使用相等運運算元(==)來比較列舉常數之間的值是否相等。

if (currentSeason == SPRING) {
    printf("It's spring!\n");
} else if (currentSeason == SUMMER) {
    printf("It's summer!\n");
} else if (currentSeason == AUTUMN) {
    printf("It's autumn!\n");
} else if (currentSeason == WINTER) {
    printf("It's winter!\n");
}

在上述範例中,我們使用if語句根據當前季節輸出相應的訊息。

此外,我們還可以使用switch語句根據列舉常數執行不同的程式碼塊。

switch (currentSeason) {
    case SPRING:
        printf("It's spring!\n");
        break;
    case SUMMER:
        printf("It's summer!\n");
        break;
    case AUTUMN:
        printf("It's autumn!\n");
        break;
    case WINTER:
        printf("It's winter!\n");
        break;
    default:
        printf("Invalid season!\n");
        break;
}

在上述範例中,根據currentSeason的值,我們執行不同的程式碼塊。

五、自定義列舉常數的值

預設情況下,列舉常數的值是按順序自動賦予的。但是,我們也可以顯式地為列舉常數指定值。

enum Month {
    JANUARY = 1,
    FEBRUARY,
    MARCH,
    APRIL,
    MAY,
    JUNE
};

在上述範例中,我們定義了一個名為Month的列舉型別,併為JANUARY指定了值1。其餘的常數依次遞增。

六、列舉作為函數引數和返回值

列舉常常被用作函數的引數和返回值,以便傳遞和表示一組選項或狀態。

enum Result {
    SUCCESS,
    FAILURE
};

enum Result performOperation() {
    // 進行操作...
    if (/* 操作成功 */) {
        return SUCCESS;
    } else {
        return FAILURE;
    }
}

在上述範例中,我們定義了一個列舉型別Result,用於表示操作的結果。函數performOperation()執行某個操作,並根據操作的成功與否返回相應的列舉常數。

七、列舉巢狀

C語言中,列舉也可以巢狀在其他結構中,以建立更復雜的資料結構。

struct Person {
    char name[20];
    enum Gender {
        MALE,
        FEMALE
    } gender;
};

在上述範例中,我們定義了一個結構體Person,其中包含一個名為gender的巢狀列舉型別Gender

小結

通過這篇文章,我們學會了

1、列舉的基本概念

2、列舉的常見用法和使用技巧