2017-05-05 11 views
-3

私はC++を学んでいますが、浮動小数点または倍精度を本当によく理解していません。私はintを理解しています、intは整数の略で、値を格納するために文字を割り当てます。しかし、同じようにfloatとdoubleを使用することもできます。私は、コードを使用しています::ここでブロックとは、私がオンラインチュートリアルからアップバッチ処理コードです:"double"と "int"がコード内の別の解決策を思い起こさせるのはなぜですか?

#include <iostream> 
using namespace std; 

int main() 
{ 
double a,z; 
cin >> a; 

while(true) 
{ 
    if (a == -1) 
     break; 
    z += a; 
    cin >> a; 
} 
cout << "the result is: " << z << endl; 
return 0; 
} 

私はこれをコンパイルすると、それは空のプロンプトが表示されます。複数の番号を入力することができ、番号自体はコード内で受け入れ可能な任意のサイズにすることができます。任意の数値を入力し、Enterキーを何回でも押すことができます。次に、「-1」と入力すると、入力したすべての数字の合計がコードに表示されます。

これは説明が必要なのかどうか分かりませんが、私はオーバーフローをスタックするのが新しいので、私の無知を許します。私の質問は、私が "double a、z;" to、 "int a、z;"なぜ私は別の結果を得ますか?私はこれを試して、あなたもすることができます。通常のコードでは "double"をタイプすると2、2、-1と入力することができますが、これは4を表示します。しかし、コードに "int"がある場合は、2をもう一度追加しようとします。 4309762。なぜこれが起こるのですか?私はdoubleとintの違いを知りたいのですが、2つの答えがどうして違うのですか?ありがとう。

+4

*未定義の動作*ので:また、勧告として、あなたは余分なコードとbreakの使用を避けるために、次のようにあなたのwhileループを変更することができます。何かを初期化するのを忘れた。 – LogicStuff

+4

'z'を0に初期化することを忘れないでください。 – 4386427

答えて

3

これは、未定義の動作があるためです。つまり、変数の1つは、デフォルトで0に設定されていないため、intまたはdoubleとなっています。 aを追加すると、zに格納されている不確定値の値が追加されます。このため、未定義の動作が発生してランダムな値が返されます。したがって、あなたのコードを修正するために、あなたがこれを行うことができます:

#include <iostream> 
using namespace std; 

int main() 
{ 
    int a,z = 0; //<-- 
    cin >> a; 

    while(true) 
    { 
     if (a == -1) 
      break; 
     z += a; 
     cin >> a; 
    } 
    cout << "the result is: " << z << endl; 
    return 0; 
} 

あなたはすぐに行の後に入力を取るための値であるaを割り当てる必要はありません理由は、仮定の入力が成功したと述べました。

while(a != -1) 
{ 
    z += a; 
    cin >> a; 
} 
+0

それを指摘してくれてありがとう@ 4386427。私はそれを修正しました –

+1

初期化されていない(非静的ローカル)変数の値は["indeterminate"](http://stackoverflow.com/questions/1597405/what-happens-to-a-declared-uninitialized-variable-in "ランダム"ではない) –

+0

_here 'z'は、デフォルトでは' int'として0に設定されていないので、ランダムな値を持っています._何が問題ではありません変数の型は 'int'、' double'、または他のバリエーションです。それを言うことなく '0'に初期化されることはありません。 –

関連する問題