Komme bei if else nicht weiter



  • So wie ich das sehe hat deine while Schleife keine abbruchbedingung und ist immer wahr.



  • So habe noch einmal nachgeschaut ...

    Wenn ich STRG-D drücke bricht das Programm ab und soll mit der Auswertung beginnen .. steht auch so in der while ... wie mache ich das aber nun mit der Auswertung ?

    Gruß



  • if (!(std::cin >> eingabe)) 
            break;
    

    Die Schleife bricht erst ab, wenn std::cin einen Fehler meldet. Wahrscheinlich nicht das, was du willst.

    Noch was:

    • Folgende Initialisierung ist bei skalaren Typen eigentlich unüblich (aber erlaubt). Normalerweise macht man das mit einem =.
    int richtig (0); 
      int falsch (0); 
      int spielanzahl (1);
    
    • Um eine Variable zu inkrementieren (um 1 zu erhöhen), gibt es operator++
    • statt '\n' am Zeilenende kannst du auch std::endl verwenden, das leert gerade noch den Puffer.


  • So habe noch einmal nachgeschaut ...

    Wenn ich STRG-D drücke bricht das Programm ab und soll mit der Auswertung beginnen .. steht auch so in der while ... wie mache ich das aber nun mit der Auswertung ?

    Wenn ich z.B. STRG-D drücke .. kommt ganz kurz meine Auswetung aber das Fenster geht von alleine zu ..

    Gruß



  • seppwert schrieb:

    Wenn ich STRG-D drücke bricht das Programm ab und soll mit der Auswertung beginnen .. steht auch so in der while

    Wo soll das stehen?

    Ich hab das Gefühl, du kennst dich noch nicht so gut mit den Grundlagen aus. Tastatureingaben wie diese sind nicht Teil der C++-Standardbibliothek. Erstelle doch eine Abbruchbedingung so, dass bei Eingabe eines bestimmten Zeichens/Wortes/... aufgehört wird. Oder halt, wenn die Fragen vorbei sind.



  • Ich habe bisher 3 Stunden Programmieren gehabt uns soll nun dies umsetzen .. finde ich auch etwas hart .. 😕 .. aber Vorgabe ist Vorgabe ...

    Die While ist anscheinend so gestaltet, dass wenn ich eine ungültige Eingabe tätige, das Programm abbricht... wie komme ich aber von dort in die Auswertungsabfrage ?

    Danke für die Nette Anfängerhilfe .. 😉 Bin echt dankbar über jeden der sich mit do einem Prog-Noob abgibt .. ^^



  • So sieht es jetzt momentan aus

    Nur wenn ich das Programm durch eine ungültige Eingabe beende kommt nur ganz kurz die Anzeige der Auswertung ... das Fenster schliesst sich sofort ...

    Wie kann ich die Auswetung stehen lassen, bis eine Benutzereingabe zum schließen kommt ?

    Danke

    //
    // Aufgabe1.cpp
    //
    // Ein Programm zum üben der verschiedenen Zahlensysteme
    //
    // Autor(en): ...
    // Erstellt am: ...
    //
    
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    int main()
    {
      // Aufgabenstellung ausgeben:
      std::cout << "Dezimaldarstellung der Hexadezimalzahl eingeben "
                   "(Strg-D fuer Ende):\n\n";
    
      // Zufallszahlengenerator initialisieren:
      std::srand(std::time(0));
    
      // Variablen fuer die Auswertung
      /* TODO (2): Nach dieser Zeile Variablen definieren */
    
      int richtig (0);
      int falsch (0);
      int spielanzahl (1);
    
      while (true)
      {
        // Erzeugen einer zufälligen Zahl (zwischen 0 und 99)
        int ausgabe = std::rand() % 100; 
    
    	std::cout << spielanzahl <<". Frage: Wie ist die dezimale Darstellung der hexadezimalen Zahl ";
        std::cout << std::hex; // Ausgabeformat auf hexadezimal umstellen
        std::cout << ausgabe << "?\n";
        std::cout << std::dec; // Ausgabeformat auf dezimal zurueckstellen
    	std::cout << "Antwort: ";
    
        // Eingabe lesen
        int eingabe;
    
    	// break beendet die while-Schleife (und damit das Programm)
        if (!(std::cin >> eingabe)) 
    		break;  
    
        // Eingabe pruefen 
        /* TODO (1): Nach dieser Zeile Anweisungen zum Pruefen der Eingabe schreiben */
    
    	if (eingabe==ausgabe)
    
    	{
    
          std::cout << "\n";
    	  std::cout << "RICHTIG!\n";
    	  std::cout << "\n";
    
    	  richtig=richtig+1;
    	  spielanzahl=spielanzahl+1;
    
    	}
    
        else 
    
    	{
          std::cout << "\a";
    	  std::cout << "\n";
    	  std::cout << "FALSCH! Die richtige Antwort waere " << ausgabe << " gewesen! \n";
    	  std::cout << "\n"; 
    
    	  falsch=falsch+1;
    	  spielanzahl=spielanzahl+1;
    
        }
    
    }
    
      // Auswertung
      /* TODO (3): Nach dieser Zeile Anweisungen fuer die Auswertung schreiben */
    
    std::cout << "Sie haben von " <<spielanzahl-1 <<" Fragen " << falsch <<" Fragen falsch beantwortet und" << richtig <<" Fragen richtig beantwortet.\n";
    
    if (richtig>=falsch/2)
    
    {
    std::cout << "Sie haben den Test BESTANDEN!\n";
    }
    else
    {
    	std::cout << "Sie haben den Test nicht bestanden!";
    	}
    { 
    }
    
    }
    




  • Nun kommt, dass lokale Funktiondefinitionen (hier wait)nicht erlaubt sind .. ich verzweifle noch ^^ ...



  • Du kannst Funktionen auch nur global definieren (ausserhalb von main() ).

    Bitte tu dir den Gefallen und schau die Grundlagen von C++ richtig an. Sonst bringt das hier keinem was und du kommst gleich mit der nächsten Frage.


Anmelden zum Antworten