0

私は顧客注文アプリケーションであるプログラムをやっています。基本的には、顧客が製品を購入するためにシステムに登録する必要があるデータベース(e-bayなど)です。私が現在抱えている問題は、顧客を変更するようになったときです。

基本的に、プログラムを実行するとメニューが表示されます。顧客を選択し、サブメニューがあり、顧客データを変更することを選択します。次に、IDの入力を求められ、プログラムはそれが有効かどうかを確認します。ID番号が有効な場合は、変更する基準を選択できるようになります。その基準を変更すると、~~~ ITEM EDITED ~~~が出力され、フリーズのようになります。その後は何も起こらず、自分でプログラムを終了する必要があります。

これは、無効なIDが入力された場合にも発生します。これが発生すると、メインメニューが出力され、メインメニューから選択する番号を入力しても何も起こりません。

自分で解決してみましたが、問題が見つかりません。ケースexit(0)の後ではなく使用しようとしましたが、同じ問題が発生しました。break;以下は、modify関数のコードです。構造体宣言などの必要な情報がすべて含まれたヘッダーファイルがあることをお知らせします。

modify_customer()
{
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);

char another;
int flag = 0;
int choice;
char x[8];

FILE *pCust;
int size;

printf("\nENTER CUSTOMER ID NUMBER: ");
//fflush(stdout);
scanf("%s",x);

flag = checkcustomer(x);

if(flag==0)
{
    pCust=fopen("customer.txt","r+b");
    rewind(pCust);

    while(fread(&cust,sizeof(cust),1,pCust))
    {
        if(strcmp(cust.id,x)==0)
        {
            printf("\nid ==> %s",cust.id);
            printf("\nname ==> %s",cust.name);
            printf("\nsurname ==> %s",cust.surname);
            printf("\naddress ==> %s",cust.address);
            printf("\nDO YOU WANT TO EDIT THIS REDORD [Y/N]: ");
            scanf("%s", &another);
            fflush(pCust);

            if(another=='Y'|| another=='y')
            {
                printf("\n(1) EDIT ID NUMBER");
                printf("\n(2) EDIT NAME");
                printf("\n(3) EDIT SURNAME");
                printf("\n(4) EDIT ADDRESS");

                printf("\nenter choice (1) - (4) to edit: ");
                //fflush(stdout);
                scanf("%d",&choice);

                switch(choice)
                {
                case 1 : printf("\nEDIT RECORD [ID]");
                         printf("\nenter new customerID:");
                         scanf("%s",cust.id);
                         size = sizeof(cust);
                         fseek(pCust,-size,SEEK_CUR);
                        fwrite(&cust,sizeof(cust),1,pCust);
                         break;

                case 2 : printf("\nEDIT RECORD [NAME]");
                         printf("\nenter new name: ");
                         //fflush(stdout);
                         scanf("%s",cust.name);
                         size = sizeof(cust);
                         fseek(pCust,-size,SEEK_CUR);
                        fwrite(&cust,sizeof(cust),1,pCust);
                         break;

                case 3 : printf("\nEDIT RECORD [SURNAME]");
                         printf("\nenter new surname: ");
                         //fflush(stdout);
                         scanf("%s",cust.surname);
                         size = sizeof(cust);
                         fseek(pCust,-size,SEEK_CUR);
                        fwrite(&cust,sizeof(cust),1,pCust);
                         break;

                case 4 : printf("\nEDIT RECORD [ADDRESS]");
                         printf("\nenter new address: ");
                         //fflush(stdout);
                         scanf("%s",cust.address);
                         size = sizeof(cust);
                         fseek(pCust,-size,SEEK_CUR);
                        fwrite(&cust,sizeof(cust),1,pCust);
                         break;
                }
                printf("\n~~~ITEM EDITED~~~");
                break;
            }
            else
            {
                printf("\nRECORDS ARE NOT MODIFIED");
                customer_menu();
            }
        }
    }
}
if(flag==1)
{
    printf("\nITEM DOES NOT EXIST. TRY AGAIN");
    main_menu();
}
fflush(stdout);
getch();
fclose(pCust);

return 0;
}
4

0 に答える 0