菜单无法正常工作

时间:2012-12-27 11:20:27

标签: c

#include <stdio.h>
#include <stdlib.h> //for the clear screen function
#include <string.h>

struct customer
{
    int custID;
    char custName[50];
    char custAddress[100];
};

typedef struct customer c;

void load_menu(void);
void customers_menu(void);
void createNew(void); //initialize your file
void add_Customer(c c1[30]); //add a new record to the file
FILE *fp;



int main(void)
{

load_menu();
return 0;
}

void load_menu(void)
{
int choice;

do
{
    printf("Customer Orders Main Menu. \n\n");
            printf("Please enter your choice: \n");
    printf("1. Customer's Menu \n");
    printf("2. Orders Menu\n");
    printf("3. Product Stock Menu\n");
    printf("4. Exit\n");
    printf("\n");
    if (scanf("%d",&choice)==1)
    {

        switch(choice)
        {
            case 1: system ("cls");
                    customers_menu();
                    printf("\n");
                    break;
            case 2: system ("cls");
                    orders_menu();
                    printf("\n");
                    break;
            case 3: system ("cls");
                    stock_menu();
                    printf("\n");
                    break;
            case 4: printf("Quitting program!\n");
                    break;
            default: printf("Invalid choice! Please try again\n");
                    printf("\n");
                break;
        }
    }

    else
    {
        fflush(stdin);
        printf("Characters are invalid, please enter a number: \n ");
        choice=0;
    }

}while((choice !=4));
}




void createNew(void)
{
    FILE *fp;
    fp=fopen("Customer.dat", "w");
    if (fp==NULL)
        printf("File creation failed! \n");
    else
    {
        printf("File created! \n");
        fclose(fp);
    }

}

void add_Customer (c c1[30])
{
    int i, n , cc=0;
    FILE *fp;
    fp=fopen("Customer.dat", "a");
    system("cls");

    if(fp==NULL)
   {
       printf("File Creation Failed!");
   }
   system("cls");

   printf("Enter the number of Customers: ");
   scanf("%d", &n);

   for(i=0;i<n;i++)
   {
       printf("Customer's ID (numbers only)  : ");
       scanf("%d", &c1[i].custID);

       printf("Customer's  Name              : ");
       gets(c1[i].custName);

        printf("Customer's Address            : ");
        gets(c1[i].custAddress);



        fwrite(&c1[i], sizeof(c), 1, fp);
    }cc++;

    fclose(fp);
}

void recordCount(c c1[30], int *count)
{
    add_Customer(c1);
    count=0;
    count++;
}

void customers_menu(void)
{
int choice;
    c c1[30];
    int i;


do
{
    printf("\n");
    printf("Customers Menu \n\n");
    printf("Please enter your choice: \n");
    printf("1. Add Customer \n");
    printf("2.\n");
    printf("3.\n");
    printf("4. Go back to Main Menu \n");
    recordCount (c1, &i);

    if (scanf("%d",&choice)==1)
    {

        switch(choice)
        {
            case 1: add_Customer(c1);
                    createNew();

                    printf("\n");
                    break;
            case 2:
                    printf("\n");
                    break;
            case 3:
                    printf("\n");
                    break;
            case 4: printf("Going back to Main Menu\n");
                    system ("cls");
                    break;
            default: printf("Invalid choice! Please try again\n");
                    printf("\n");
                break;
        }
    }

    else
    {
        fflush(stdin);
        printf("Characters are invalid, please enter a number: \n ");
        choice=0;
    }

}while((choice !=4));

我遇到问题,因为当我进入客户菜单时,它立即开始执行案例1(仍然无法正常工作)。有人可以帮我解决这个错误,因为我尝试了我所知道的一切,但仍然是徒劳的

2 个答案:

答案 0 :(得分:1)

此问题来自if (scanf("%d",&choice)==1),因为scanf不会返回选择。如果输入有效答案(如数字),则返回1并将案例工作改为1.我认为这是问题所在。 如果输入char而不是整数,scanf将返回0。

答案 1 :(得分:1)

我认为您的问题是在customers_menu()输出菜单,但不读取选择,而是调用直接调用recordCount()的{​​{1}}。

addCustomer()之后,我们会返回addCustomer(),然后调用customers_menu()以获取已久的菜单。

其他几点说明:

  1. scanf()不好,我建议您改用gets()(使用%s)。
  2. 执行scanf()然后清除屏幕有点没用。
  3. 错误消息应该真正转到stderr(fprintf(stderr,...))而不是stdout(printf(...))
  4. 您的代码缺少尾随}。
  5. cc已添加到但未使用。