Wo liegt mein fehler ?



  • 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