Sem*_*ted 0 c++ arrays for-loop infinite-loop
我正在制作一个程序,用户输入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];
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到无限循环的位置.
for(int i = 0; i < sizeof(stockPrices) + 1; i++) {
cin >> stockPrices[i];
}
Run Code Online (Sandbox Code Playgroud)
这部分工作正常,这就是为什么我没有意识到我的上限是错误编辑:我认为这部分工作正常
没有足够的代码来确定问题所在.但只是在那个片段中你可能有错误的上限:
for (int j = 0; j < sizeof(stockPrices) / sizeof(stockPrices[0]); j++)
Run Code Online (Sandbox Code Playgroud)
sizeof以字节为单位给出对象的大小.对于一个数组,它是项目数×一个项目的大小.因此,要获得需要除以sizeof一个项目大小的项目数.
你可能也不想要这+1两种.
请注意,您编写的循环将在有或没有此更正的情况下终止.它将在您的版本中运行超过数组的末尾并访问非法内存,这可能会使程序崩溃,但它不会永远循环.
同样的事情适用于你的第二个循环.它应该是:
for (int i = 0; i < sizeof(stockPrices) / sizeof(stockPrices[0]); i++)
{
cin >> stockPrices[i];
}
Run Code Online (Sandbox Code Playgroud)
在这里,不正确的上限可能是罪魁祸首.您的原始循环将尝试读取超过30个值.如果只提供了30个,则程序将在31日挂起,cin >> stockPrices[i]等待输入更多数字.