Wo liegt mein fehler ?



  • Ich verstehe ja was du meinst zumindestens das mit der while schleife, nur dachte ich eigentlich, er bei den cases die eingabe vergleicht und dann den inhalt ausgibt in meinem fall die funktion aufruft. wenn ich eine falsche eingabe tätige sagt er mir ja auch bescheid, das die eingabe falsch ist.

    und in z 113. bei der if anweisung meinst du das mit "=", es muss ein "==", weils keine zuweisung sondern verlgiech ist?



  • Okay ich komm nicht drauf. Kann mir wer sagen wie ich das Problem lösen kann ?



  • Ichverstehe0Komma0 schrieb:

    Okay ich komm nicht drauf. Kann mir wer sagen wie ich das Problem lösen kann ?

    Huh?
    Worauf kommst Du nicht?

    Sorry: ich kann Dir nicht immer ganz folgen.
    Evtl. habe ich Dich auch mißverstanden: Die Bedingung Deiner do-while Schleife macht diese zwar zu einer Endlosschleife, aber dadurch, dass Du mit
    return 0;
    aus der main springst fällt das gar nicht auf.

    Das mit Z. 113 hast Du auch geschnallt.

    Was ist denn jetzt noch das Problem?



  • Furble Wurble schrieb:

    Was ist denn jetzt noch das Problem?

    Zeilen 38, 44 und 49.



  • Genau, ich verstehe nicht warum meine Funktion nicht aufgerufen wird 😕



  • Weil das kein Aufruf ist.

    Das ist eine Deklaration.



  • Das ist wohl kategorie dumme fehler. Danke sehr hab ihn gefunden.

    lg DImi



  • Ich weiß ich gehe hier schon jedem auf die Nerven, aber noch eine letzte Frage.

    Wenn ich das Spiel starte und es läuft gebe ich ja eine Zahl ein und er vergleicht diese und gibt mir aus, ob es richtig oder falsch ist. Soweit ists okay und das Programm funktioniert. Gebe ich aber ein Buchstaben ein, kommt es zu einer endloss schleife, obwohl die schleife bei 10 abbrechen soll.

    Frage 1. Warum bricht der nicht ab?
    Frage 2. Wie kann ich eine Überprüfung auf Integer machen.



  • Ichverstehe0Komma0 schrieb:

    Ich weiß ich gehe hier schon jedem auf die Nerven, aber noch eine letzte Frage.

    Wenn ich das Spiel starte und es läuft gebe ich ja eine Zahl ein und er vergleicht diese und gibt mir aus, ob es richtig oder falsch ist. Soweit ists okay und das Programm funktioniert. Gebe ich aber ein Buchstaben ein, kommt es zu einer endloss schleife, obwohl die schleife bei 10 abbrechen soll.

    Frage 1. Warum bricht der nicht ab?
    Frage 2. Wie kann ich eine Überprüfung auf Integer machen.

    Weil der Buchstabe im stream verbleibt und in der Folge immer wieder gelesen (aber nicht extrahiert) wird kommt es zu einer Endlosschleife.

    Lösung: wenn istream::operator>>() fehlschlägt erstmal alles bis zum nächsten newline aus dem Stream schmeissen.

    #include <iostream>
    #include <limits>
    
    void purge(std::istream& in){
      in.clear();
      in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    
    int main(){
      int a=0;
      for(;;){
        if(!(std::cin >> a)){
          std::cerr << "Das war kein int!\n";
          purge(std::cin);
        }
        if(a==42)
          break;
      } 
    }
    


  • switch (Menue) 
            { 
            case('e') : 
            case('E') : 
            { 
                         void einfachesSpiel(); 
            }
            break;
    

    Meiner laienhaften Meinung nach, solltest du außerdem die Break; anweisung in den entsprechenden Anweisungsblock des 'case' setzen



  • GMoney597 schrieb:

    Meiner laienhaften Meinung nach, solltest du außerdem die Break; anweisung in den entsprechenden Anweisungsblock des 'case' setzen

    Ob das break im Block oder dahinter steht, ist egal.



  • aaah alles klar vielen vielen dank, wow hab mein ersten bug programmiert. Irgendwie stolz 🙂

    Das mit dem break; habe ich aus dem Buch c++ für spieleprogrammierer von heiko kalista, wenn es jemandem was sagt :).



  • Also soweit ich weis wird das mit Case so geschrieben:

    switch(Menue)
    {
            case('e') : 
            case('E') : 
                  void einfachesspiel();
                  break;
    
            case('m'):
    

    usw.

    Und wegen der Überprüfung ob es eine Zahl ist kann man doch auch isdigit nehmen oder täusche ich mich da?

    z.B. if(Menue !isdigit)
    {
    break;
    }

    Mfg Kirito



  • Geschweifte Klammer oder nicht spielt keine Rolle,
    du hast auch eine Funktionsdeklaration statt einen Aufruf,
    if(Menue !isdigit) ist völlig falsch und was ein break innerhalb eines if-Blockes soll weißt wohl nur Du.

    Guter Einstand.



  • Ohne bös zu klingen ich bin froh für jeden Post, aber die Probleme habe ich mit eurer Hilfe schon gelöst, der Fehler war auch die Deklaration und nicht aufruf schon korigiert.


Anmelden zum Antworten