C语言餐厅点餐问题(2)【有关strcmp的问题】

在最近的课设作业为餐厅点餐的程序。在写这个程序有关点餐的功能中,我遇到一个我分析不了的错误。

我的思路是通过以菜名进行点餐的方式来完成这个功能。即通过在头文件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];

图片说明

图片说明图片说明

建议你自己调试一下就会很快发现问题。 打个断点然后跟着程序一步一步往下走。 花不了多久时间