为什么我的C程序在第一个for循环完成后崩溃了?

时间:2016-09-12 00:12:05

标签: c

所以基本上在计算机完成后要求你输入所有数据(第一个for循环)之后,编译器就崩溃了,我很困惑。我正在使用代码块16.01和mingw32 gcc编译器。

作为附注,如果你有时间,你能否就如何改进这个计划给我一些想法?我说的是效率明智而且冗余度更低。它应该允许用户为5种不同的股票输入4个不同的数据点,然后计算每种股票的每个数据点的初始成本,当前成本和利润,然后将其显示给用户。正如您所看到的,我只是推动了单个阵列中所有股票的所有数据点(称为“成本”),并在阵列中进行了我的计算。我知道逻辑和执行是混乱的,所以这就是为什么我要求你们寻找替代方案。

#include <stdio.h>
#include <string.h>
void main () {
    const char *stock [5];
    int i = 0, j = 0, k = 0;
    float stockData[4], cost[15];
    stock[0] = "IBM";
    stock[1] = "ORACLE";
    stock[2] = "SUN MICRO";
    stock[3] = "LINKSYS";
    stock[4] = "CISCO";

    for (;i<=4;i++){
        printf("Enter the number of shares, buying price per share, current price per share, and the yearly fees for %s: \n", stock[i]);
        scanf ("%f%f%f%f",&stockData[0],&stockData[1],&stockData[2],&stockData[3]);
            if (i==0){
                cost[0] = (stockData[0]*stockData[1]);
                cost[1] = (stockData[0]*stockData[2]);
                cost[2] = (cost[1]-cost[0]-stockData[3]);
                memset(stockData, 0, sizeof(stockData));
                }
            if (i==1){
                cost[3] = (stockData[0]*stockData[1]);
                cost[4] = (stockData[0]*stockData[2]);
                cost[5] = (cost[4]-cost[3]-stockData[3]);
                memset(stockData, 0, sizeof(stockData));
            }
            if (i==2){
                cost[6] = (stockData[0]*stockData[1]);
                cost[7] = (stockData[0]*stockData[2]);
                cost[8] = (cost[7]-cost[6]-stockData[3]);
                memset(stockData, 0, sizeof(stockData));
            }
            if (i==3){
                cost[9] = (stockData[0]*stockData[1]);
                cost[10] = (stockData[0]*stockData[2]);
                cost[11] = (cost[10]-cost[9]-stockData[3]);
                memset(stockData, 0, sizeof(stockData));
            }
            if (i==4){
                cost[12] = (stockData[0]*stockData[1]);
                cost[13] = (stockData[0]*stockData[2]);
                cost[14] = (cost[13]-cost[12]-stockData[3]);
                memset(stockData, 0, sizeof(stockData));
            }
        }

        for (;j<=4;j++){
            printf("Stock Name: %s, Initial Cost: $%.2f, Current Cost: $.2%f, Profit: $.2%f ", stock[j],cost[++k],cost[++k],cost[++k]);
        }
    }

编辑:导致问题的是数组长度。我在原始代码中修复它,现在我只是得到了奇怪的输出。我会再次更新如果我自己无法修复它。

1 个答案:

答案 0 :(得分:1)

检查您的库存阵列。您为4个元素定义了它,但分配了5个元素。