0

我正在制作一个程序,用户输入 30 天的收盘价,程序会找到最低和最高价格。

用户输入数据后,程序将无法继续。

double highest = stockPrices[0];
double lowest = stockPrices[0];

for(int j = 0; j < sizeof(stockPrices) + 1; j++) {
     if(stockPrices[j] > highest) {
      highest = stockPrices[j];
     }   
     if(stockPrices[j] < lowest) {
      lowest = stockPrices[j];
     } 
}

但是,我似乎无法找到无限循环的位置。


for(int i = 0; i < sizeof(stockPrices) + 1; i++) {
    cin >> stockPrices[i];
}

这部分工作正常,这就是为什么我没有意识到我的上限不正确编辑:我认为这部分工作正常

4

1 回答 1

5

没有足够的代码来找出问题出在哪里。但就在那个片段中,你可能有错误的上限:

for (int j = 0; j < sizeof(stockPrices) / sizeof(stockPrices[0]); j++)

sizeof以字节为单位给出对象的大小. 对于一个数组,它是项目数 × 一个项目的大小。因此,要获得您需要除以sizeof一个项目的大小的项目数。

你可能也不想要+1

请注意,无论是否进行此更正,您编写的循环都会终止。它会在您的版本中运行超过数组的末尾并访问非法内存,这可能会使程序崩溃,但它不会永远循环。


同样的事情也适用于你的第二个循环。它应该是:

for (int i = 0; i < sizeof(stockPrices) / sizeof(stockPrices[0]); i++)
{
    cin >> stockPrices[i];
}

这里不正确的上限可能罪魁祸首。您的原始循环将尝试读取 30 多个值。如果只提供 30 个,则程序将在 31 日挂起,cin >> stockPrices[i]等待输入更多数字。

于 2012-10-18T01:09:41.927 回答