2016-06-20 15 views
-19
#include <iostream> 

using namespace std; 

int main() 
{ 
    int szam,tart; 
    cout << "Num="; 
    cin >> szam; 
    while(szam!=tart){ 
     tart=szam; 
     cout << "Now insert a number which is not " << tart << "\n Your number is="; 
     cin >> szam; 
     if(szam==tart) 
      cout << "And you failed."; 
    } 
    return 0; 
} 

Ist dieser Code nicht korrekt? Mein Lehrer sagt immer wieder, dass es nicht korrekt ist, weil ich einen Wert für "scharf" Variable hätte nennen sollen, wie "cin >> tart".Ist das in C++ nicht korrekt?

Bitte antworten Sie so bald wie möglich.

+0

Was soll der Code tun? Bitte schreibe den Text auf Englisch. Aber ich denke, das Programm sollte laufen, bis Sie den gespeicherten Wert erneut eingeben. Also solltest du niemals szam ändern, nur tart – thorsan

+3

Gehe mit einem Debugger oder Stift und Stift durch jede Zeile im Code und schau, was der Wert jeder Variablen ist und du wirst verstehen. Versuchen Sie auch, Ihr Programm auszuführen und den Ausdruck anzusehen, sieht es richtig aus? – thorsan

+0

Das Programm fordert den Benutzer auf, eine Nummer zu schreiben, die nicht die zuvor eingegebene Nummer ist. Wenn er die Nummer schreibt, die zuvor eingegeben wurde, endet das Programm. –

Antwort

7

Da tart noch nicht zugewiesen wurde, bevor es verwendet wird (im Vergleich), ist das Ergebnis des anfänglichen Vergleichs ein undefiniertes Verhalten.

1

Es ist richtig, aber Sie sollten tart einen Wert geben. Andernfalls wird es mit einem zufälligen initialisiert.

+0

Sie haben Recht. Aber ich denke, dass der Wert von tart am Anfang des Programms keine Rolle spielt, da es den Wert von szam variabel erhält. –

0
#include <iostream> 

using namespace std; 

int main() 
{ 
    int szam; 
    int tart=0;//need to initialize or need to call cin >> tart; 
    cout << "Num="; 
    cin >> szam; 
    while(szam!=tart){ 
     tart=szam; 
     cout << "Now insert a number which is not " << tart << "\n Your number is="; 
     cin >> szam; 
     if(szam==tart) 
      cout << "And you failed."; 
    } 
    return 0; 
} 
6

Es ist schlecht ausgebildet gcc erhalten Sie auch eine Diagnose geben:

main.cpp:13:15: warning: 'tart' may be used uninitialized in this function [-Wmaybe-uninitialized] 
    while(szam!=tart){ 
      ~~~~^~~~~~ 

mit nicht initialisierten Variablen ist nicht definiertes Verhalten.

0

"int herb;" erstellt eine Variable namens tart des Typs int, der Wert ist jedoch nicht festgelegt (undefiniert), was bedeutet, wenn Sie ihn verwenden, kann er und (meistens) Fehler verursachen.

+0

Ja, aber später wird es den Wert der szam Variable bekommen, nicht? –

+0

Ja -nachher. Nachdem du es in: "while (szam! = Tart) {" getestet hast. Sie machen also den Fehler, es zu testen, was zu einem schlechten Ergebnis führt, und dann korrigieren Sie es. Der Fehler wird weiterhin auftreten. – ZeroZ30o

+0

[FYI] Das ist nur eine minimale Reichweite. Es gibt nichts, was eine Implementierung stoppt, um "int" 64 Bits zu machen. – NathanOliver

Verwandte Themen