Warum läuft dieses Programm mit Eingabewert nicht gleich Datentyp int????



  • Hallo, ich habe zum Üben gerade folgende do - while - Schleife programmiert:

    #include <iostream>
    
    int main()
    {
      int counter;
      std::cout << "Wie viele Hellos?: ";
      std::cin >> counter;
      do
      {
        std::cout << "Hello!\n";
        counter--;
      }
      while (counter > 0);
    
      std::cout << "counter: " << counter;
      return 0;
    }
    

    für counter = 2 ist das Resultat:

    C:\Dokumente und Einstellungen\Thomas Zettler\cbproject\bodyskip\windows\Release_Build\bodyskip.exe
    Wie viele Hellos?: 2
    Hello!

    Hello!

    counter: 0

    ... das ist erwartungsgemäß.

    Für counter = t (nicht Element int / Ganzzahl) erwartete ich zu Übungszwecken einen Computer und / oder Programmabsturz.

    Hier aber das unerwartete Ergebnis:

    C:\Dokumente und Einstellungen\Thomas Zettler\cbproject\bodyskip\windows\Release_Build\bodyskip.exe
    Wie viele Hellos?: t
    Hello!

    Hello!

    Hello!

    Hello!

    Hello!

    usw. bis in alle Ewigkeit.

    Warum löst "t" nicht Element von int überhaupt eine Schleifenausführung aus? ist t nicht Element von char? ich dachte ich kann nur 1,2, 3, ... , n usw. eingeben.

    Bitte um Rätsellösung. bin newbie.

    LG kasimirle



  • Das Problem ist dass Du nicht überprüfst, ob die Eingabe einer Zahl erfolgreich war. Wenn Du nämlich keine Zahl eingibst schlägt (cin >> counter) fehl und counter bleibt unverändert. Und da Du counter vorher nicht initialisiert hast, steht da ein beliebiger Wert drin.

    D.h. Du hast zwei Möglichkeiten: Resultat der Eingabe abfragen oder counter vorher mit 0 initialisieren.

    if (std::cin >> counter) 
      {
        do
        {
          std::cout << "Hello!\n";
          counter--;
        }
        while (counter > 0);
      }
    


  • LordJaxom schrieb:

    ...
    D.h. Du hast zwei Möglichkeiten: Resultat der Eingabe abfragen oder counter vorher mit 0 initialisieren.

    if (std::cin >> counter) 
      {
        do
        {
          std::cout << "Hello!\n";
          counter--;
        }
        while (counter > 0);
      }
    

    Wobei in diesem Fall das "Initialisieren mit 0" nur gewünscht arbeitet, wenn man die Schleife von do-while in while-do umbaut.

    Gruß,

    Simon2.


Anmelden zum Antworten