程序似乎在执行函数后冻结了吗?

时间:2013-01-06 15:33:14

标签: c

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

基本上,当我运行程序时,我有一个菜单。我选择客户,我有一个子菜单,我选择修改客户数据。然后它会要求我输入一个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;
}

0 个答案:

没有答案