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“结束,则对应的菜品信息正常显示但是之后有很多乱码。如果输入多余一个菜品代码,则正常显示且没有乱码,但是第一个菜品对应的信息的那一行为空(不显示,即空出一行)。求问上述情况原因,应当如何是的菜品信息正常显示?