fly_20134 2022-11-08 13:07 采纳率: 100%
浏览 59
已结题

c语言自动点餐程序,数组赋值和读取

c语言自动点餐程序,首先询问客人数量,然后让每个客人输入菜品的序号,最后根据每个客人的选择打印账单并且计算价格。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<string.h>


const char *space=" ";
const char *tab="   ";

char A1[36] = "A1   HAM AND EGG                 $20";
char A2[36] = "A2   BACON AND CHEESE            $10";
char A3[36] = "A3   TUNA SALAD                  $15";
char A4[36] = "A4   BEEF SOUP                   $25";

char B1[36] = "B1   SPICY BEEF BARBECUE         $20";
char B2[36] = "B2   PORK BARBECUE               $10";
char B3[36] = "B3   OVEN CHICKEN BARBECUE       $15";
char B4[36] = "B4   PULLED BEEF BARBECUE BURGER $20";

char C1[36] = "C1   SPICY PORK BARBECUE         $20";
char C2[36] = "C2   VEGETABLE PORK BARBECUE     $10";
char C3[36] = "C3   OVEN PORK BARBECUE          $15";
char C4[36] = "C4   PULLED BEEF BARBECUE BURGER $25";

char line[45] = "---------------------------------------------";

char heading[36] = "Code Dish                      Price";

全局定义菜品名称以及其他字符串

char* order_breakfast(char*n)
{

    if (strcmp(n, "A1") == 0)
        return A1;
    else if (strcmp(n, "A2") == 0)
        return A2;
    else if (strcmp(n, "A3") == 0)
        return A3;
    else if (strcmp(n, "A4") == 0)
        return A4;
    else if (strcmp(n, "B1") == 0||strcmp(n, "B2") == 0||strcmp(n, "B3") == 0||strcmp(n, "B4") == 0||strcmp(n, "C1") == 0||strcmp(n, "C2") == 0||strcmp(n, "C3") == 0||strcmp(n, "C4") == 0)
    {
        printf("This dish is not available now!\n");
        return *space;
    }
    else
    {
        printf("This dish code does not exist! Try again! ");
        return *space;
    }

}

点餐程序包括三个时间段,但是这里以早餐点餐为例

int main()
{
    int password;
    int customer_number;
    time_t timep;
    struct tm *p;
    int hour;
    int counter;
    int counterx[6]={0,0,0,0,0,0};
    char storage[6][4][40];
    char code[2];
    int total_cost=0;
    int cash;
    int change;
    int a,b,c;

    for (a=0;a<6;a++)
    {
        for (b=0;b<4;b++)
        {
            for (c=0;c<40;c++)
            {
                storage[a][b][c]="";
            }
        }
    }

main函数内定义以及变量和数组初始化,storage的目的在于存储order函数的返回值并且在打印账单的时候打印出来(对应不同客人)

if (hour>=8&&hour<=10)
    {
        printf("Breakfast is available now.\n");
        for (counter=0;counter<customer_number;counter++)
        {
            printf("Dish entry for customer %d(enter F to quit):\n",counter+1);
            for (counterx[counter]=0;counterx[counter]<4;counterx[counter]++)
            {
                scanf("%s",code);
                if (strcmp(code, "F") != 0)
                {
                    if (strcmp(order_breakfast(code)," ") != 0){
                    memcpy(storage[counter][counterx[counter]],order_breakfast(code),40);
                    if (strcmp(code,"A1")==0)
                        total_cost += 20;
                    else if (strcmp(code,"A2")==0)
                        total_cost += 10;
                    else if (strcmp(code,"A3")==0)
                        total_cost += 15;
                    else if (strcmp(code,"A4")==0)
                        total_cost += 25;
                    }
                }
                else
                    break;
            }

        }
    }

首先判断输入的字符串是不是为F(结束一个顾客的输入),然后判断输入的是否是对应的菜品代码(判断是不是space),之后通过if语句判断并且记录菜品价格。

printf("%s\n",line);
    printf("%s\n",storage[0][0]);
    printf("%s\n",storage[0][1]);
    printf("%s\n",storage[0][2]);

打印storage中存储的菜品信息。但是对于上面的程序,如果单输入一个代码例如“A1",然后输入”F“结束,则对应的菜品信息正常显示但是之后有很多乱码。如果输入多余一个菜品代码,则正常显示且没有乱码,但是第一个菜品对应的信息的那一行为空(不显示,即空出一行)。求问上述情况原因,应当如何是的菜品信息正常显示?

  • 写回答

2条回答 默认 最新

  • 於黾 2022-11-08 13:57
    关注

    你不判断客人到底点了几个菜,就直接输出[0],[1],[2],后面的数组里存的是乱码,输出的可不是乱码吗
    storage[a][b][c]="";这里不能初始化成空字符串,你的每个元素是char啊,你要初始化成0

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月8日

悬赏问题

  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败