2016-04-11 8 views
-1

ここに示されているヒストグラムを生成するはずのコードセクションがあります。入れ子にされたforループが正しく機能しない

ostream& operator<<(ostream& outputStream, aHistogram& h){ 
outputStream << "Constructing histogram." << endl; 
int numberOfBins = h.v.size(); 
int max = h.getMax(); 
int longest = h.getLongestLine(); 
int diceData = 0; 

for (int i = 0; i < numberOfBins; ++i) { 
    outputStream << i + h.getNumDice() << ":"; 
    diceData = h.v.at(i); 

    for (int x = 1; x <= (diceData/max) * longest; x++) { 
     outputStream << "X"; 
    } 
    outputStream << endl; 
} 

return outputStream;} 

問題は、それが唯一の最高値入力用のXさんの「最大」の数を生成し、ループは他の値のために、まったく動作しないようだ、です。ここに出力のスクリーンショットがあります。

は私が間違ってここに何が起こっているのか正確にはわかりません。整数演算を使用して

+2

... [mcve]の略です。 – jtbandes

+0

数字 '(diceData/max)* longest'を印刷しましたか?私はそれがゼロだと思います。 – jtbandes

答えて

0
(diceData/max) * longest 

は、部門は0に切り捨て、あなたは0 * longestdiceData < maxで終わります。浮動小数点演算を使用して0と1の間の数値を取得するか、最初に乗算を行います。

(double) diceData/max * longest 
diceData * longest/max 

2番目の方法を使用すると、オーバーフローに注意してください。

+0

ありがとうございました!私はそれがどのように私の心を滑りさせるか分からない! –

関連する問題