繁体   English   中英

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

[英]Why does my C program crash after the first for loop is completed?

所以基本上在计算机完成要求您输入所有数据(第一个 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]);
        }
    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM