私は顧客注文アプリケーションであるプログラムをやっています。基本的には、顧客が製品を購入するためにシステムに登録する必要があるデータベース(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;
}