0
#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));

Customers メニューに入ると、すぐにケース 1 を実行しようとしているので、問題があります (まだ正しく動作しません)。私が知っていることはすべて試しましたが、まだ無駄なので、誰かがこのエラーを修正するのを手伝ってくれませんか

4

2 に答える 2

1

この問題は、選択を返さないif (scanf("%d",&choice)==1)ためです。scanf有効な回答 (数字など) を入力すると、1 が返され、大文字と小文字が 1 に切り替わります。これが問題だと思います。整数の代わりに char を入力すると、scanf0 が返されます。

于 2012-12-27T11:27:46.450 に答える
1

あなたの問題はcustomers_menu()、メニューを出力するが、選択を読み取らず、代わりにrecordCount()which を直接呼び出すことだと思いますaddCustomer()

addCustomer()私たちが戻った後、customers_menu()それscanf()は長い間メニューを呼び出します。

その他の注意事項:

  1. gets()scanf()は良くありません。代わりに (with %s)を使用することをお勧めします。
  2. 画面をクリアしてから行うのprintf()は少し無意味です。
  3. エラーメッセージは、実際には stdout (printf(...)) ではなく stderr (fprintf(stderr,...)) に送られるべきです。
  4. コードの末尾に } がありません。
  5. cc が追加されますが、使用されません。
于 2012-12-27T11:58:56.733 に答える