2017-01-14 13 views
-2

私は新しいコーディングをしました。変数 'sum'をより大きくすることが、より大きく、nを1/nの合計で(mと等しくない)mより大きくすることです。これはなぜinfinteループを引き起こしますか?

私は同じ問題を2回解決する必要があります(1つはforループを使用し、もう1つはwhileループを使用します)。しかし、両方の方法は終わりのループで終わります。

「< =」を「<」に置き換えると、コードが正常に機能しています。しかし、それは

私を助けることができますか?あなたは整数型で動作するのでタイプlongと値> 1を持つのnされた状態で

#include <iostream> 
using namespace std; 

int main() { 
unsigned int m = 1; 
double sum = 0; 
long n; 
n = 1; 
while (sum <= m) //THIS LINE 
{ 
    double sumsum = 1/n; 
    sum += sumsum; 
    n++; 
} 


cout << "n = " << n << endl ; 
cout << "sum = " << sum << endl ; 

return 0; 
} 
+1

[これはあなたのための答えを提供するのに役立つかもしれません](http://stackoverflow.com/questions/3602827/what-is-the-behavior-of-integer-division-in-c) – Obicere

+9

デバッガは何を示しましたか単一のコードをステップ実行するとき? –

+0

あなたが思ったことをやることが止まる正確なポイントを見つけてください。すべての変数の実際の値を期待値と比較します。いくつかの 'std :: cout'でもこれを行うことができますが、デバッガの使い方を学ぶことは長期的にはより良いアイデアです。いずれにせよ、〜20行のコードではそれほど難しいことではありません。あなたはすぐに正確な場所を見つけるでしょう。 –

答えて

0

Epression 1/nは常に、0得られます。したがって、sumは最初の実行で1に割り当てられますが、常にが追加されるため、値> 1になることはありません。

double sumsum = 1.0/n; 

にコードを変更し

、それが動作するはずです。 1.0は浮動小数点で操作するように強制することに注意してください。

+0

ありがとうございます。これは私の問題を解決した – sk01

関連する問題