所以基本上在计算机完成后要求你输入所有数据(第一个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]);
}
}
编辑:导致问题的是数组长度。我在原始代码中修复它,现在我只是得到了奇怪的输出。我会再次更新如果我自己无法修复它。
答案 0 :(得分:1)
检查您的库存阵列。您为4个元素定义了它,但分配了5个元素。