2016-07-20 10 views
-2

Ich habe den Code ausgegeben, aber ich bekomme immer eine Fehlermeldung: "Fehler C4700 nicht initialisierte lokale Variable" zi_saptamana "verwendet." Fehler C4700 nicht initialisierte lokale Variable "dar" verwendet. Ich habe If/If-else/else schon einmal verschachtelt, aber diesen Fehler habe ich noch nie erfahren. Ich bin neu in C++ und lerne immer noch.C++: Fehler C4700 nicht initialisierte lokale Variable "" verwendet

#include <iostream> 
#include <conio.h> 

using namespace std; 

int main() { 
    int zi_saptamana, a, s, d, f, g, h, j; char dar; 

    switch (zi_saptamana) 
    { 
    case 1: 
     cout << " a"; cin >> a; 
     break; 
    case 2: 
     cout << " s"; cin >> s; 
     break; 
    case 3: 
     cout << " d"; cin >> d; 
     break; 
    case 4: 
     cout << " f"; cin >> f; 
    case 5: 
     cout << " g"; cin >> g; 
    case 6: 
     cout << " h"; cin >> h; 
    case 7: 
     cout << " j"; cin >> j; 
    default: 
     cout << " nu stiu ce zi este aceasta te rog sa alegi o zi de la 1 la 7"; 
     break; 
    } 
    cout << " ce zi a saptamanii doresti?"; 
    cin >> zi_saptamana; 
    cout << " doresti sa alegi o alta zi din saptamana ??\n_> "; 
    if (dar == 'y' || dar == 'Y'); 
    { 
     main(); 
    } 
    return 0; 
} 
+1

Der Fehler ist ziemlich selbsterklärend. Ich meine, es ist klar, aus dem Code 'zi_saptamana' wurde nicht initialisiert vor' switch (zi_saptamana) ' – drescherjm

+3

Welcher Teil der" nicht initialisierten lokalen Variablen verwendet "ist unklar? –

+1

Die Fehlermeldung ist klar. Wenn 'switch (zi_saptamana)', 'zi_saptamana' nicht initialisiert oder gesetzt ist, ist ihr Wert unbestimmt. – songyuanyao

Antwort

2

Sie erklären zi_saptamana als int, aber unmittelbar danach, ohne sie einen Wert eingeben (ohne Initialisierung it), Sie Verwendung es in der switch Aussage.

Beachten Sie, dass der Wert zi_saptamana, der eine lokale Variable ist, nicht definiert ist (es kann alles sein), bevor es initialisiert wird. Gleiches gilt für dar.

Das ist, was der Compiler Ihnen sagt.

Beachten Sie, dass dies, wie gesagt, ein undefiniertes Verhalten ist, was das Programm nicht mehr zu einem wohlgeformten Programm macht und der Compiler frei ist, das zu tun, was ihm angemessen erscheint. In diesem Fall (d. H. Dieser Compiler) gibt es einen Fehler aus.

Einfach ausgedrückt (ohne das "Standard"): Es ist undefiniertes Verhalten: Der Lauf des Rests eines Programms kann von dieser Variablen abhängen, und wenn es nicht in einem bekannten Zustand ist, können Sie nicht wissen, was geschehen. Das ist der Grund, warum die meisten Compiler es als Fehler kennzeichnen.

+0

Es ist nicht, dass es "kann alles sein", es ist, dass das Lesen einer nicht initialisierten Variable ist undefiniertes Verhalten und das Programm hat somit keine Bedeutung und der Compiler kann alles tun - einschließlich der Entfernung der ganz umschalten. Sie sind nicht grantanteed, um nur einen zufälligen Müllwert zu bekommen (obwohl Sie * könnten *). –

+0

Nun, für alles, was Sie wissen oder kümmern, kann es alles sein. Aus diesem Grund wurde die Verwendung einer nicht initialisierten Variablen als undefiniertes Verhalten, ISTM, deklariert. –

+0

Nun, Compiler sind ziemlich aggressiv in Bezug auf die Ausnutzung von undefiniertem Verhalten in diesen Tagen. Und es kann andere Teile Ihres Programms sowie ein Ergebnis ändern - Sie können nicht davon ausgehen, dass die "Unbestimmtheitseffekte" in * nur * Interaktionen mit dieser einen Variable enthalten sein werden. Siehe zum Beispiel [this] (https://blogs.msdn.microsoft.com/oldnewthing/20140627-00/?p=633), [dies] (http://blog.regehr.org/archives/213) & [this] (http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html). –

0

Sie haben die Variable zi_saptamana zu initialisieren in Ihrem Programm haben Schalter arbeiten, das zu tun hat gerade diese Aussage vor dem Einschalten: -

scanf("%d",&zi_saptamana); 

es wird ein Integer-Wert von Benutzer nehmen und Schalter funktioniert nach dazu.

Verwandte Themen