簡單計算器的實現(C語言)(指針)(switch)

算法的通常實現:算法

#include<stdio.h>
void mnue()
{
    printf("------------------------------------------\n");
    printf("------1.Add         2.Sub-----------------\n");
    printf("------3.Mul         4.Div-----------------\n");
    printf("------      0.exit       -----------------\n");
    printf("------------------------------------------\n");
}
int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}
int Mul(int x, int y)
{
    return x * y;
}
int Div(int x, int y)
{
    return x / y;
}
int main()
{
    int input = 0;
    int x = 0;
    int y = 0;
    do
    {
        mnue();
        printf("請選擇:");
        scanf("%d", &input);

        switch (input)
        {
        case 1:
            printf("請輸入兩個操做數:");
            scanf("%d%d", &x, &y);
            printf("%d + %d = %d\n", x, y, Add(x, y));
            break;
        case 2:
            printf("請輸入兩個操做數:");
            scanf("%d%d", &x, &y);
            printf("%d - %d = %d\n", x, y, Sub(x, y));
            Sub(x, y);
            break;
        case 3:
            printf("請輸入兩個操做數:");
            scanf("%d%d", &x, &y);
            printf("%d * %d = %d\n", x, y ,Mul(x, y));
            break;
        case 4:
            printf("請輸入兩個操做數:");
            scanf("%d%d", &x, &y);
            printf("%d / %d = %d\n", x, y, Div(x, y));
            break;
        case 0:
            printf("退出\n");
            break;
        default:
            printf("輸入錯誤,請從新輸入!\n");
        }
    } while (input);
    return 0;
}

封裝新函數,存儲冗餘項,利用回調函數優化case裏面的冗餘項:
回調函數:
簡單計算器的實現(C語言)(指針)(switch)數組

#include<stdio.h>
void mnue()
{
    printf("------------------------------------------\n");
    printf("------1.Add         2.Sub-----------------\n");
    printf("------3.Mul         4.Div-----------------\n");
    printf("------      0.exit       -----------------\n");
    printf("------------------------------------------\n");
}
int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}
int Mul(int x, int y)
{
    return x * y;
}
int Div(int x, int y)
{
    return x / y;
}
void Cacl(int (*pf)(int, int))
{
    int x = 0;
    int y = 0;
    printf("請輸入兩個操做數:");
    scanf("%d%d", &x, &y);
    printf("%d\n", pf(x, y));
}
int main()
{
    int input = 0;
    do
    {
        mnue();
        printf("請選擇:");
        scanf("%d", &input);

        switch (input)
        {
        case 1:
            Cacl(Add);
            break;
        case 2:
            Cacl(Sub);
            break;
        case 3:
            Cacl(Mul);
            break;
        case 4:
            Cacl(Div);
            break;
        case 0:
            printf("退出\n");
            break;
        default:
            printf("輸入錯誤,請從新輸入!\n");
        }
    } while (input);
    return 0;
}

利用函數指針數組實現:
當功能多了的時候,case語句不會那麼長了ide

#include<stdio.h>
void mnue()
{
    printf("------------------------------------------\n");
    printf("------1.Add         2.Sub-----------------\n");
    printf("------3.Mul         4.Div-----------------\n");
    printf("------      0.exit       -----------------\n");
    printf("------------------------------------------\n");
}
int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}
int Mul(int x, int y)
{
    return x * y;
}
int Div(int x, int y)
{
    return x / y;
}
int main()
{
    int input = 0;
    int x = 0;
    int y = 0;
    do
    {
        mnue();
        printf("請選擇:");
        scanf("%d", &input);
        int (*pArr[5])(int, int) = { 0,Add,Sub,Mul,Div };
        //故意設5個,使得選擇的函數能夠對應下標
        if (input >= 1 && input <= 4)
        {
            printf("請輸入兩個操做數:");
            scanf("%d%d", &x, &y);
            printf("%d\n", pArr[input](x, y));
        }
        else if (input == 0)
        {
            printf("退出\n");
        }
        else
        {
            printf("輸入錯誤,請從新輸入!\n");
        }
    } while (input);
    return 0;
}
相關文章
相關標籤/搜索