结构库存和数据文件

时间:2015-05-07 00:04:06

标签: c file struct stocks

以下是我想要做的事情:

  1. 创建结构股票 - 名称[20],股票,buyprice,currprice,buycost,currcost,profit。
  2. 从键盘加载 - 名称,份额,buyprice,currprice,currcost,profit,buycost。
  3. 按利润从高到低排序
  4. 查找所有股票的总利润
  5. 打印多少股票赚钱,亏钱,收支平衡。
  6. 这是我到目前为止所做的:

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #define size 2
    #include<stdlib.h>
    struct stock
    {
        char name[20];
        int shares;
        float buyp, currp, buycost, currcost, profit;
    };
    void load(struct stock s[], int n)
    {
        int i;
        for (i = 0; i<n; i++)
        {
            printf("Enter name:");
            gets(s[i].name);
            fflush(stdin);
            printf("Enter shares:");
            scanf("%d", &s[i].shares);
            printf("Enter buyprice");
            scanf("%f", &s[i].buyp);
            printf("Enter current price");
            scanf("%f", &s[i].currp);
    
            s[i].currcost = s[i].shares * s[i].currp;
            s[i].buycost = s[i].shares * s[i].buyp;
            s[i].profit = s[i].currcost - s[i].buycost;
    
    
        }
    }
    
    void print(struct stock s[], int n)
    {
            int ne,p,z;
            ne = p = z =0;
        for (int i=0;i<n;i++)
        {
            if(s[i].profit<0)
                ne++;
            if (s[i].profit>0)
                p++;
            if(s[i].profit==0)
                z++;
            printf("Amount of stocks made money:%d\n",p);
            printf("Amount of stocks lost money:%d\n",ne);
            printf("Amount of stocks broke even:%d\n",z);
            printf("The current cost is:%f\n",s[i].currcost);
            printf("The profit is:%f\n",s[i].profit);
            printf("The buycost is:%f\n",s[i].buycost);
        }
    }
    void totprofit(struct stock s[], int n)
    
    {
        int count = 0,  i;
        float totprofit = 0.0;
        for (i = 0; i < n; i++)
        {
            totprofit +=s[i].profit;
            printf("Total profit is:%f\n",totprofit);
            }
        }
    
    void sort(struct stock s[], int n)
    {
        int i; int j;
        stock t;
        for (i = 0; i<n - 1; i++)
            for (j = 0; j<n - 1; j++)
                if (s[j].profit<s[j + 1].profit)
                {
                    t = s[j]; s[j] = s[j + 1]; s[j + 1] = t;
                }
    }
    
    void main()
    {
        stock s[size];
        load(s, size);
        print(s,size);
        totprofit(s, size);
        sort(s,size);
        system("pause");
    }
    

    我的问题是,当它编译时,它会完美运行,直到它再次询问名称(因为程序运行两次)。为什么?

    Enter name:
    Apple
    Enter shares:
    5
    Enter buyprice:
    3
    Enter current price:
    4
    Enter name:
    Enter shares:
    3
    Enter buyprice:
    4
    Enter current price:
    5
    Amount of stocks made money:1
    Amount of stocks lost money:0
    Amount of stocks broke even:0
    The current cost is:20.000000
    The profit is:5.000000
    The buycost is:15.000000
    Amount of stocks made money:2
    Amount of stocks lost money:0
    Amount of stocks broke even:0
    The current cost is:15.000000
    The profit is:3.000000
    The buycost is:12.000000
    Total profit is:5.000000
    Total profit is:8.000000
    Press any key to continue . . .
    

1 个答案:

答案 0 :(得分:1)

您的函数void totprofit与变量float totprofit具有相同的名称。

至少更改其中一个。

至于第7步,我不确定你在问什么。