2017-05-05 2 views
-3

Ich lerne C++, und ich verstehe Float oder Double nicht wirklich gut. Ich verstehe int, int steht für Integer, und Sie weisen ihm ein Zeichen zu, um einen Wert zu speichern. Sie können aber auch Float verwenden und auf die gleiche Weise verdoppeln. Ich verwende Code :: Blocks und hier ist ein Code, den ich aus einem Tutorial Online batched up:Warum haben "double" und "int" eine andere Lösung in meinem Code?

#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; 
} 

Als ich das kompilieren, wird es eine leere Eingabeaufforderung angezeigt werden soll. Sie können mehrere Zahlen eingeben, und die Zahlen selbst können jede für den Code akzeptable Größe haben. Sie geben eine beliebige Zahl ein und drücken die Eingabetaste, so oft Sie möchten. Dann können Sie "-1" eingeben und der Code zeigt die Summe aller eingegebenen Zahlen an.

Ich weiß nicht, ob das nötig war, um es zu erklären, aber ich bin neu im Stapelüberlauf, also entschuldige meine Ignoranz. Meine Frage ist: wenn ich das "doppelte a, z;" zu "int a, z;" Warum bekomme ich ein anderes Ergebnis? Ich habe das getestet, und Sie können es auch. Mit dem regulären, "double" im Code kann ich 2, 2 und -1 eingeben, dies wird dann 4 anzeigen. Wenn ich jedoch den "int" in meinem Code habe, versuche ich 2 wieder zusammen zu addieren, es wird angezeigt 4309762. Warum passiert das? Ich würde gerne den Unterschied zwischen Double und Int kennen und warum die beiden Antworten so unterschiedlich sind. Vielen Dank.

+4

Da * undefiniert Verhalten *. Du hast vergessen etwas zu initialisieren. – LogicStuff

+4

Denken Sie daran, 'z' auf Null zu setzen – 4386427

Antwort

3

Der Grund dafür ist, dass Sie ein undefiniertes Verhalten haben. Das bedeutet, dass eine Ihrer Variablen, hier z, einen unbestimmten Wert hat, da sie standardmäßig nicht auf 0 als int oder als double gesetzt ist. Indem Sie a hinzufügen, fügen Sie jeden Wert hinzu, der zu dem in z gespeicherten unbestimmten Wert gehört. Aus diesem Grund erhalten Sie undefiniertes Verhalten, das zu zufälligen Werten führt. Daher Ihren Code zu beheben, können Sie dies tun:

#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; 
} 

Der Grund Sie nicht a ein Wert zugewiesen ist, weil Sie Eingabe unmittelbar nach der Zeile, unter der Annahme der Eingangs gelungen. Auch als Empfehlung, können Sie Ihre while-Schleife des folgenden ändern, um die Verwendung von zusätzlichem Code und break zu vermeiden:

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

Danke, dass Sie @ 4386427 darauf hingewiesen haben. Ich habe es behoben –

+1

der Wert einer nicht initialisierten (nicht-statischen lokalen) Variable ist ["unbestimmt"] (http://stackoverflow.com/questions/1597405/what-happens-to-adeclared-uninitialized-variable-in) -c-does-it-have-a-value), nicht "random" –

+0

_here 'z' hat einen zufälligen Wert, da es standardmäßig nicht auf 0 gesetzt ist. Es spielt keine Rolle, was Der Typ der Variablen ist: 'int',' double' oder irgendeine andere Variante - sie wird nicht auf '0' initialisiert, ohne dass Sie es dazu sagen. –

Verwandte Themen