基于C语言实现点餐操作

前言:本代码只实现点餐和结算操作,一种菜品如果需要点多份需要输入多次。
在本次实现过程中,最大的bug是strcmp段错误。原因是:strcmp()函数的对比参数不可以为空(null),所以在使用strcmp()函数之前需要对参数进行判断。
基于C语言实现点餐操作_第1张图片
具体代码:

#include 

using namespace std;

int main()
{
    //定义菜单
    char *cai[12] = {"0","1.芥兰炒牛肉","2.黄瓜炒肉","3.苦瓜煎蛋","4.川味回锅肉","5.卤味拼盘","6.蒜蓉时蔬","7.玉米排骨汤","8.炸酱面","9.米饭","10.可乐"};
    //定义价格
    float p[12] = {0,28.88,16.88,16.88,30.88,30.88,12.88,18.88,10.88,2.88,3};
    //定义一个数组用于存放已点的菜
    char *s[30];
    int i = 1;
    //定义一个数组用于存放已点的菜的价格
    float p1[30];
    //结算价格
    float num = 0;
    printf("***************欢迎光临小甘饭馆******************\n");
    printf("                ——请点菜——                    \n");
    for(int i=1; i<=10; i++)
    {
        printf("%s   %.2f\n",cai[i],p[i]);
    }
    printf("\n");
    printf("输入序号即可选择菜品!\n(22)取消菜品\n(88)确定点菜\n");
    while(1)
    {
        int n = 0;
        scanf("%d",&n);
        if(n == 88) break;
        if(n == 22)
        {
            printf("——请输入需要取消菜品序号——            ");
            int m[30];
            char c;
            int h1 =0;
            for(int h=1; h<=30 && c != '\n'; h++)
            {
                scanf("%d",&m[h]);
                h1 = h;
                c = getchar();
            }
            //二重循环
            //外循环:用于遍历需取消菜品
            //内循环:用于遍历已点菜品
            //使用strcmp函数进行字符串对比,相等返回0,不相等返回其他值
            for(int j=1; j <= h1; j++)
            {
                for(int k=1; k <= i-1; k++)
                {
                    //需注意的是!在进行字符串对比前,需为对比字符串添加条件判断,字符串为空不能进行strcmp操作
                    if(s[k] != NULL && cai[m[j]] != NULL)
                    {
                        if(strcmp(s[k],cai[m[j]]) == 0)
                        {
                            s[k]=NULL;
                            num = num - p1[k];
                            p1[k]=NULL;
                        }
                    }
                }
            }
            printf("\n");
            printf("****取消成功!请继续点菜****\n");
        }
        s[i] = cai[n];
        p1[i] = p[n];
        num = num + p[n];
        i++;
    }
    printf("-------------------------------------------------\n");
    printf("您的菜单如下\n");
    for(int j= 1; j<i; j++)
    {
        if(s[j] != NULL && p1[j] != NULL)
        {
            printf("%s  %.2f¥\n",s[j],p1[j]);
        }
    }

    printf("共计:%.0f元\n谢谢!",num);
    return 0;
}

运行结果:
基于C语言实现点餐操作_第2张图片
小白一枚,欢迎交流~

你可能感兴趣的:(程序设计,c语言,c++,算法)