Syntax Fehler



  • Hi Leute.
    Bevor ich euch mein Problem zeigen möchte muss ich vorher nocht dazu sagen, das ich mich erst 2 Tage lang mit c++ beschäftige.
    Dieses Programm ist ein von mir selbst geschriebenes Programm, ohne es irgendwo gelesen, abgeschrieben zu haben.

    Wenn ich es kompilieren will schreibt er mir diesen Fehler:
    error: syntax error before `else'

    Aber warum, das verstehe ich nicht.
    Könntet Ihr mir vielleicht sagen, warum?? Aber bitte ohne mir den richtigen code zu posten. Eine erklärung reicht, ich möchte es selber machen.
    Ein Feedback wäre auch nicht schlecht,wie ihr dieses eigentlich simple programm findet und ob es für den wie schon gesagt 2. tag ok ist.
    Danke schonmal im voraus.

    #include <iostream>
    using namespace std;
    
    int main(){
    	int const LIMIT=50;
    	cout<<"Welche Geschwindigkeit sind Sie in der Stadt gefahren?: ";
    	int a;
    	cin>>a;
       if(a<=LIMIT)
    	   cout<<"Weiter so!\n"<<"Sie fahren nicht zu schnell"<<endl;
    	   if(a>LIMIT+5)
    		   cout<<"55?!  Naja, OK.\n"<<"Es liegt nocht in der Tolleranz"<<endl;
    	   else
    			cout<<"Achtung!!!\a\n"<<"Runter vom Gas\n"<<"Sie fahren zu schnell"<<endl;
       else
    		cout<<"Achtung!!!\a\n"<<"Runter vom Gas\n"<<"Sie fahren zu schnell"<<endl;
       return 0;
    }
    


  • Benutez doch if / else if / else, das wär einfacher als so eine verschaltete Geschichte wo die Blöcke fehlen { ... }



  • int main(){
        int const LIMIT=50;
        cout<<"Welche Geschwindigkeit sind Sie in der Stadt gefahren?: ";
        int a;
        cin>>a;
       if(a<=LIMIT)
       { // hast du vergessen
           cout<<"Weiter so!\n"<<"Sie fahren nicht zu schnell"<<endl;
           if(a>LIMIT+5)
               cout<<"55?!  Naja, OK.\n"<<"Es liegt nocht in der Tolleranz"<<endl;
           else
                cout<<"Achtung!!!\a\n"<<"Runter vom Gas\n"<<"Sie fahren zu schnell"<<endl;
       } // hast du vergessen
       else
            cout<<"Achtung!!!\a\n"<<"Runter vom Gas\n"<<"Sie fahren zu schnell"<<endl;
       return 0;
    }
    

    [edit]
    zu langsam und tags



  • was meinst du mit if/else if/else?? davon habe ich noch nicht gelesen.
    wo liegt der unterschied??



  • achja nochwas.
    Es wäre schon, wenn ihr vielleicht die fachbegriffe weglassen könntet, davon verstehe ich nähmlich garnichts?
    ich kann mir zum beispiel nicht unter dem beitrag

    zu langsam und tags
    vorstellen.

    danke

    Miller_m

    Warum müssen da di klammern hin??
    Ich habe doch bereits am anfang und am ende des codes welche



  • Führt nur eine Anweisung durch:

    if(...) machDies();
    

    Führt mehrere Anweisungen durch:

    if(...)
    {
        machDies();
        machDas();
    }
    

    Verschatelung von Schleifen:

    if(bedingung_A) 
    {
        machEtwas();
    }
    else
    {
        if(bedingung_B)
        {
            machDies();
        }
        else
        {
            machDas();
        }
    }
    
    // geht kürzer:
    if(bedingung_A)
    {
        machEtwas();
    }
    else if(bedingung_B)
    {
        machDies();
    }
    else
    {
        machDies();
    }
    

    Im Grunde hat man da nur Klammern veggelassen aber das ist nunmal die übliche Syntax.



  • Samsonite schrieb:

    achja nochwas.
    Es wäre schon, wenn ihr vielleicht die fachbegriffe weglassen könntet, davon verstehe ich nähmlich garnichts?
    ich kann mir zum beispiel nicht unter dem beitrag

    zu langsam und tags
    vorstellen.

    Damit meinte Fireflow höchstwahrscheinlich sich selbst ;).

    Fireflow schrieb:

    Verschatelung von Schleifen:

    Es gibt keine if-schleifen !!!!!!11111einseins

    :p 😉

    Caipi



  • Ok. Ich habs. aber
    1. was hat an meinem code nicht gestimmt??
    2. wenn ihr euch jetzt den code anseht, dann schaut mal auf die zeile mit dem
    else if und sagt mir warum ich hier a<LIMIT+5 und nicht a>LIMIT+5 eingeben muss, damit ich einen wert eingeben muss,um die nachricht mit dem Naja zu bekommen.

    ich muss doch einen wert eingeben der zwischen 51 und 55 liegt. das ist doch grösser alsdie von mir zulässige. aber warum nehme ich da das kleiner zeichen???

    achja nochwas.
    kann mir einer von euch vielleicht sagen, was an der autoren edition von visual c++ anders ist zu der normalen??



  • if(a <= LIMIT)
       cout<<"Weiter so!\n"<<"Sie fahren nicht zu schnell"<<endl;
    else if((a <= LIMIT + 5) && (a > LIMIT))
       cout<<"Naja, OK.\n"<<"Es liegt nocht in der Tolleranz"<<endl;
    else
       cout<<"Achtung!!!\a\n"<<"Runter vom Gas\n"<<"Sie fahren zu schnell"<<endl;
    


  • Ich sehe die veränderung, aber verstehe sie nicht, kannst du mir das erklären??

    Und ein zusätzliches problem habe ich entdeckt
    Wenn ich das Programm innerhalb den editors oder compilers wie auch immer starte, dann läuft es einwandfrei, starte ich es aber nicht vom compiler sondern mit doppelklick auf die .exe. dann startet es und schliesst sofort wieder nach eingabe einer zahl und drücken der enter taste
    warum??



  • achja nochwas.
    kann mir einer von euch vielleicht sagen, was an der autoren edition von visual c++ anders ist zu der normalen??

    Der Unterschied ist, dass du Programme mit der Autoren-Edition nicht weitergeben (oder war es verkaufen?) darfst.

    Samsonite schrieb:

    Ich sehe die veränderung, aber verstehe sie nicht, kannst du mir das erklären??

    Miller_m's Code-snippet prüft:

    Wenn die Geschwindigkeit kleiner oder gleich 50 (dem Limit) ist, dann wird die "Alles in Ordnung..:" Meldung ausgegeben.
    Wenn die Geschwindigkeit kleiner oder gleich 55 (dem Limit + 5) und größer als 50 (das Limit) ist
    (was in diesem Fall aber unnötig ist, da diese Bedingung implizit gegeben ist), dann gibt es die "Naja.."-Meldung.
    Ansonsten gibt es die "Achtung..."-Meldung
    

    Und ein zusätzliches problem habe ich entdeckt
    Wenn ich das Programm innerhalb den editors oder compilers wie auch immer starte, dann läuft es einwandfrei, starte ich es aber nicht vom compiler sondern mit doppelklick auf die .exe. dann startet es und schliesst sofort wieder nach eingabe einer zahl und drücken der enter taste
    warum??

    Siehe Dos und Windows32-Konsole-FAQ => Automatisches Schließen verhindern.

    Caipi



  • Caipi schrieb:

    Siehe Dos und Windows32-Konsole-FAQ => Automatisches Schließen verhindern.

    den link habe ich verzweifelt gesucht 😃



  • else if((a <= LIMIT + 5) && (a > LIMIT))

    ok. heisst das dann soviel wie das (a <= LIMIT +5) 2 bedingungen stellt??
    ich meine: einmal kleiner oder gleich 50 und einmal kleiner oder gleich 55 runter bis LIMIT??



  • durch die verknüpfung && werden zwei true erwartet

    Samsonite schrieb:

    ich meine: einmal kleiner oder gleich 50 und einmal kleiner oder gleich 55 runter bis LIMIT??

    kleiner gleich 55 && grösser 50



  • ok. ich hoffe ich habe dich richtig verstanden, aber
    wenn doch (kleiner gleich 55 && grösser 50)
    warum sagt er mir dann zwischen 51 und 55 den Naja satz??
    sorry das ich so schwer von begriff bin und soviele fragen stelle, aber ich möchte es einfach verstehen.
    und was heist es werden zwei true erwartet??



  • bsp:
    52 ist kleiner gleich 55 somit ergibt dieses true.
    52 ist grösser als 50 somit ergibt dieses auch true.
    und true und (&&) true ergeben true 😃
    somit wird die abfrage bejat und es wird "naja ... " ausgegeben.



  • Ich glaube jetzt habe ich dich verstanden.

    Er prüft also bei einer eingabe von 52 wie bei bedingungen im verhältnis stehen. werden beide bejat, so zeigt er mir naja.

    wenn ich das richtig verstehe, ist das doch dasselbe wie aussagenlogic oder?
    mir ist das grad so aufgefallen, da wir das gerade in der schule machen.

    Stimmt das mit der aussagenlogik?



  • Ja, das stimmt

    && = UND
    || = ODER



  • Diese beiden striche für ODER, wo finde ich die auf der tastatur????
    was ist das fürn buchstabe?
    *g*



  • [Alt Gr]+ Die Taste neben dem y


Anmelden zum Antworten