在最近的课设作业为餐厅点餐的程序。在写这个程序有关点餐的功能中,我遇到一个我分析不了的错误。
我的思路是通过以菜名进行点餐的方式来完成这个功能。即通过在头文件order函数中定义一个char型数组,在键盘上输入菜名后用gets_s来捕捉这段字符串,再通过strcmp函数其与已定义的菜品信息的全局数组的菜名进行比对,并将其具体信息展示出来。
在这个代码写完,我编译并运行时当我输入我刚录入的菜名时,它的结果是查无此菜品,而我不输入菜名直接回车时,它却显示了我的菜品信息格式。
求解。
点餐代码如下:
#include<stdlib.h>
#include<stdio.h>
#include"time.h"
#include"windows.h"
#include"string.h"
#include"global.h"
void order()
{
int i, sel,sum=0;
system("cls");
printf("\t\t\t******************************************************\n");
printf("\t\t\t******************************************************\n");
printf("\t\t\t***************欢迎来到城科餐厅点餐功能***************\n");
printf("\t\t\t******************************************************\n");
printf("\t\t\t******************************************************\n");
printf("\n\n\n");
printf("\t\t\t******************************************************\n");
printf("\t\t\t***************1 按菜名点餐 ****************\n");
printf("\t\t\t***************2 退出点餐 ****************\n");
printf("\t\t\t******************************************************\n");
printf("\t\t\t请你输入你的选择(1-2):");
scanf_s("%d", &sel);
while (sel < 1 || sel>2)
{
printf("\t\t\t 输入错误,请你重新输入你的选择(1-2):");
scanf_s("%d", &sel);
}
switch (sel)
{
case 1:
{
char order_cm[9];
int flag, x;
getchar();
printf("\t\t\t请你输入你所要点餐的菜名:");
gets_s(order_cm);
//把输入的菜名和所有菜品的菜名进行比对,是否相等,如果相等则输出
flag = 0; //0表没有找到
for (i = 0; i <= 29; i++)
{
if (strcmp(order_cm,soft[i].cm)==0) //string compare 字符串对比
{
flag = 1;//1表示找到了
sum += soft[i].price;
for (x = 1; x <= 46; x++)
printf("-");
printf("\n");
printf("|");
printf("%-18s", "菜名");
printf("|");
printf("%-9s", "菜品类型");
printf("|");
printf("%-9s", "价格");
printf("|");
printf("\n");
for (x = 1; x <= 46; x++)
printf("-");
printf("\n");
printf("|");
printf("%-18s", soft[i].cm);
printf("|");
printf("%-9s", soft[i].lx);
printf("|");
printf("%-9d", soft[i].price);
printf("|");
printf("\n");
for (x = 1; x <= 46; x++)
printf("-");
printf("\n");
break;
}
}
if (flag == 0)
printf("\t\t\t查无此菜品!!!\n");
system("pause");
order();//点餐以后继续点餐
}
break;
case 2:
break;
}
}
菜品信息的头文件代码如下:
typedef struct dishes
{
int price;
char cm[15];
char lx[9]; //菜品类型
}CP;
//定义结构体全局数组
CP soft[30];
建议你自己调试一下就会很快发现问题。 打个断点然后跟着程序一步一步往下走。 花不了多久时间