用宏简化枚举类型的字符串输出


/// @file exam_1_8.c
/// @brief 
/**
exam_1_8 *	定义一个枚举变量,其枚举元素为人民币的面值。要求输出枚举元素字符串。
*/

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <crtdbg.h>
#include <conio.h>

typedef enum e_Face_Value_Of_RMB
{
    e_Face_Value_Of_RMB_yuan_100 = 0,
    e_Face_Value_Of_RMB_yuan_50,
    e_Face_Value_Of_RMB_yuan_20,
    e_Face_Value_Of_RMB_yuan_10,
    e_Face_Value_Of_RMB_yuan_5,
    e_Face_Value_Of_RMB_yuan_2,
    e_Face_Value_Of_RMB_yuan_1,
    e_Face_Value_Of_RMB_jiao_5,
    e_Face_Value_Of_RMB_jiao_2,
    e_Face_Value_Of_RMB_jiao_1,
    e_Face_Value_Of_RMB_fen_5,
    e_Face_Value_Of_RMB_fen_2,
    e_Face_Value_Of_RMB_fen_1,
}E_FACE_VALUE_OF_RMB;

#define STR(x) #x

#define CASE_RMB_FACE_VALUE(x, y) \
    case x: \
    { \
        strcpy(y, STR(x)); \
    } \
    break

char* fnGetString_RmbFaceValue(E_FACE_VALUE_OF_RMB eIn, char* pcMsgBuf);

int main(int argc, char *argv[ ], char *envp[ ])
{
    int eIndex = e_Face_Value_Of_RMB_yuan_100;
    char cMsgBuf[260] = {'\0'};

    for (eIndex = e_Face_Value_Of_RMB_yuan_100; eIndex <= e_Face_Value_Of_RMB_fen_1; eIndex++)
    {
        printf("%s\n", fnGetString_RmbFaceValue((E_FACE_VALUE_OF_RMB)eIndex, cMsgBuf));
    }

    /**
    e_Face_Value_Of_RMB_yuan_100
    e_Face_Value_Of_RMB_yuan_50
    e_Face_Value_Of_RMB_yuan_20
    e_Face_Value_Of_RMB_yuan_10
    e_Face_Value_Of_RMB_yuan_5
    e_Face_Value_Of_RMB_yuan_2
    e_Face_Value_Of_RMB_yuan_1
    e_Face_Value_Of_RMB_jiao_5
    e_Face_Value_Of_RMB_jiao_2
    e_Face_Value_Of_RMB_jiao_1
    e_Face_Value_Of_RMB_fen_5
    e_Face_Value_Of_RMB_fen_2
    e_Face_Value_Of_RMB_fen_1
    END, press any key to quit
    */
    
    printf("END, press any key to quit\n");
    getchar();
    
    return 0;
}

char* fnGetString_RmbFaceValue(E_FACE_VALUE_OF_RMB eIn, char* pcMsgBuf)
{
    _ASSERT(NULL != pcMsgBuf);

    switch (eIn)
    {
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_yuan_100, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_yuan_50, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_yuan_20, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_yuan_10, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_yuan_5, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_yuan_2, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_yuan_1, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_jiao_5, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_jiao_2, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_jiao_1, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_fen_5, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_fen_2, pcMsgBuf);
        CASE_RMB_FACE_VALUE(e_Face_Value_Of_RMB_fen_1, pcMsgBuf);
    default:
        _ASSERT(0);
    }

    return pcMsgBuf;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值