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オブジェクトのサイズをバイト単位で示します。アイテムの数×1つのアイテムのサイズである配列の場合。sizeofしたがって、アイテムの数を取得するには、1つのアイテムのサイズで割る必要があります。

そして、あなたはおそらくどちらも欲しくないでしょう+1

念のために言っておきますが、あなたが書いたループは、この修正の有無にかかわらず終了します。それはあなたのバージョンの配列の終わりを超えて実行され、プログラムをクラッシュさせる可能性のある不正なメモリにアクセスしますが、永久にループすることはありません。


同じことが2番目のループにも当てはまります。そのはず:

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 に答える