程序运行然后说它停止工作

时间:2017-03-05 21:00:52

标签: c

该程序需要计算物品的总成本,并向用户显示产品数量,产品数量和产品价格作为账单。请记住,我只是C语言编程的初学者,因此使用了基本功能。

 #include<stdio.h>
 #include<string.h>
typedef struct
{
    float price;
    int quantity;
    char product;
}Billing;
typedef struct
{
    int code;
    char product;
    float price;
}Stocks;
main()
{
    Stocks A;
    Billing B;
    FILE*s;
    FILE*c;
    printf(" Welcome to I.A.M Cash & Carry\n#8 New Trincity Industrial Estate\nTrincity\n");
    printf("=================================\n");
    void transfer(Billing,Stocks,FILE*,FILE*);
    transfer(B,A,s,c);
}
void transfer(Billing B,Stocks A,FILE*s,FILE*c)
{
    int count; 
    s=fopen("C:\\stock.txt","r"); 
    int counter=0;
    while(fgetc(s)!=EOF)
    {
        counter++;
    }
    fclose(s); 
    count=counter;
    Stocks D[count];
    int x; 
    s=fopen("C:\\stock.txt","r");
    for(x=0;x<count;x++)
    {
        fscanf(s,"%d",&D[x].code);
        fscanf(s,"%s",D[x].product);
        fscanf(s,"%f",&D[x].price);
    }
    fclose(s);
    void menu(Billing,Stocks[],FILE*,FILE*,int);
    menu(B,D,s,c,count);
}
void menu(Billing B,Stocks D[],FILE*s,FILE*c,int count)
{
    printf("1)Enter items for billing\n");
    printf("2)Quit\n"); 
    void choice(Billing,Stocks[],FILE*,FILE*,int);
    choice(B,D,s,c,count);
}
void choice(Billing B,Stocks D[],FILE*s,FILE*c,int count)
{
    int x;
    printf("Enter choice:\n");
    scanf("%d",&x);
    if((x<1) || (x>2))
    {
        printf("Choice invalid\nPlease Re-enter\n");
        menu(B,D,s,c,count);
    }
    if(x==1)
    {
        void submenu(Billing,Stocks[],FILE*,FILE*,int);
        submenu(B,D,s,c,count);
    }
    if(x==2)
    {
        printf("Thank you, Have a great day\n");
    }
}
void submenu(Billing B,Stocks D[],FILE*s,FILE*c,int count)
{
    int x,z,quan,prod;
    float sum=0;
    float prices=D[x].price*quan;
    c=fopen("C:\\bill.txt","w");
    do{
    printf("Select choice:\n");
    printf("1)Enter items\n");
    printf("2)Quit");
    scanf("%d",&x);
    if(x==1)
    {
        printf("Enter product code:");
        scanf("%d",&prod);
        for(z=0;z<count;z++)
        {
          if(prod==D[x].code)
          {
            printf("Enter quantity:");
            scanf("%d",&quan);
            fprintf(c,"%d  ",quan);
            fprintf(c,"%s  ",prod);
            fprintf(c,"%5.2f\n",D[x].price*quan);
            sum= sum + prices;
          }
        }
    }
    if(x==2)
    {
        printf("Thank you, Have a great day\n");
    }
}while(x!=2);
fclose(c);
void countbill(Billing,FILE*,float);
countbill(B,c,sum);
}
void countbill(Billing B,FILE*c,float sum)
{
    int y;
    c=fopen("C:\\bill.txt","r"); 
    int x=0;
    while(fgetc(c)!=EOF)
    {
        x++;
    }
    fclose(c); 
    y=x;
    Billing V[y];
    void displaybill(Billing[],FILE*,float,int);
    displaybill(V,c,sum,y);
}
void displaybill(Billing V[],FILE*c,float sum,int y)
{
    int x;
    c=fopen("C:\\bill.txt","r");
    for(x=0;x<y;x++)
    {
        fscanf(c,"%d",&V[x].quantity);
        fscanf(c,"%s",V[x].product);
        fscanf(c,"%f",&V[x].price);
        printf("%d  %s  %f\n",V[x].quantity,V[x].product,V[x].price);
    }
    printf("Total=%f",sum);
}

调试器输出

Debugger output

1 个答案:

答案 0 :(得分:0)

我很抱歉我将此作为答案,我只是想让你真正阅读它。 这段代码有很多问题,只是澄清了大部分问题:

1)您没有宣布任何职能

2)你调用大部分功能的方式是错误的

3)你使用大量变量而不初始化它们,比如x

4)你不能在数组声明中放置一个非常量变量,它必须是一个常数,或者使用动态分配。 (例如Stocks D[count]

这只是我从一般情况看到的。

在继续使用此代码之前,您可能需要做一些功课。

希望它能以某种方式提供帮助。