Zeilenumbruch ohne Anweisung?



  • Hay 🙂

    Hier der Ausschnitt meines Codes:

    ...
      do
      {
           std::cout << "Bitte Zahl eingeben: ";
           std::cin >> zahl1;
      if(zahl1)
      {
             struct knoten *k = new knoten;
             k->zahl = zahl1;
             k->next = a;
             a = k;
    
      }
     } while(zahl1);
    ...
    

    Was ich mich frage:
    Warum ist die Ausgabe von dem Programm:
    Bitte Zahl eingeben: 1
    Bitte Zahl eingeben: 2
    Bitte Zahl eingeben: 3

    Die Zahlen hab ich eingegeben, danach steht das nächste "Bitte Zahl eingeben in einer neuen Zeile, ohne dass ich den Befehl dazu gegeben hätte. Macht zwar keinen Unterschied von der Funktionsweise des Programmes, verwirrt mich allerdings trotzdem.

    Vielen Dank



  • Wenn zahl1 in einem booleschen Kontext verwendet wird, wie z.B. in der if - oder do while -Bedingung, wird es als Wahrheitswert, also true oder false interpretiert. Dabei ist jeder Wert ungleich Null true und nur Null false . Von daher läuft deine Schleife weiter, solange du nicht 0 eingibst.

    Wird der mit new angeforderte Speicher eigentlich wieder freigegeben?



  • Ja, die Schleife läuft weiter, aber WARUM steht "Bitte Zahl eingeben" beim zweiten Durchlauf, in einer neuen Zeile, ohne den Befehl "\n";

    Das war die eigentliche Frage.



  • Du hast bestimmt nach jeder Eingabe Enter gedrückt, richtig? Gib mal probehalber beim nächsten Versuch 1 2<Enter> ein.



  • In der Tat, ein interessantes Ergebnis.
    Wenn ich zwischen 1 und 2 ein Leerzeichen setzte, erscheint folgende Ausgabe:

    Bitte Zahl eingeben: 1 2 //dann Enter.
    Bitte Zahl eingeben: Bitte Zahl eingeben:

    Irgendwas mach ich wohl falsch 😞 .



  • @ Nexus

    while(a)
    {
            struct knoten *k = new knoten;
            k->zahl = a->zahl;
            k->next = b;
            b = k;
            o = a;
            a = a->next;
            delete o;
    }
    
    while(b)
    {
            o = b;
            std::cout << "\nZahl: " << b->zahl;
            b= b->next;
            delete o;
            }
    

Anmelden zum Antworten