0

我正在做一个客户订单应用程序。基本上它是一个数据库(如 e-bay),客户必须在系统中注册才能购买产品。我目前遇到的问题是当我来修改客户时。

基本上,当我运行程序时,我有一个菜单。我选择客户,我有一个子菜单,我选择修改客户数据。然后它要求我输入一个 id,程序会检查它是否有效。如果 ID 号有效,它会继续让您选择要修改的标准。修改该标准后,它会打印出~~~ITEM EDITED~~~ 然后就像冻结一样。之后什么都没有发生,我必须自己终止程序。

输入无效 ID 时也会发生这种情况。发生这种情况时,它会打印出主菜单,当我输入一个数字以从主菜单中选择时,什么也没有发生。

我尝试自己解决,但找不到问题。我尝试使用exit(0)而不是break;在案件之后使用,但发生了同样的问题。下面是修改函数的代码。只是为了让您知道我有一个包含所有必要信息的头文件,例如结构声明。

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