Schleifendurchlauf bei false



  • Guten Tag,

    beim überfliegen einer Übung für Irgendjemanden habe ich etwas seltsames entdeckt.

    Und zwar gab es eine Whileschleife, deren Rumpf wird durchgeführt, wenn die Bedingung false ergibt.
    das habe ich auch mit dem Debugger geprüft und die Bedingung ist wirklich false.
    Vielleicht habe ich ja auch einfach nur etwas übersehen, eventuell kann mir hier ja Jemand weiterhelfen.

    # include <iostream>
    
    using namespace std;
    
    int main () 
    {
    	int zahn=4; cout<<zahn<<endl;
    
    	bool test = zahn < 3;
    
    	// in der ürsprünglichen version stand hier
    	// while(zahn < 3) ergab trotzdem false
    	while (test);					
            {	
    		int teller=5;
    		while (teller<3);
    		{
    			cout<<teller<<endl;
    			teller++;
    		}		
    	}
    
    	return 0;
    }
    

    Das Endergebnis, also die Ausgabe ergibt:
    4
    5

    die 4 kommt von dem cout bevor man zu den schleifen kommt, doch von der Bedingung her müsste doch der Schleifenrumpf übersprungen werden, weil die Bedingung eben false ist. Wieso funktioniert das dann hier?



  • Du hast da ein Zeichen zu viel geschrieben - das Semikolon hinter dem while ist die leere Anweisung, die als Schleifenrumpf dient (und vermutlich sauber übersprungen wird). Der Teil in {...} ist eine ganz normale Anweisung, die mit der Schleife nichts zu tun hat.



  • Für den Compiler sieht das hier:

    while (teller<3); // <-- Semikolon!
    

    Genau so aus wie

    while (teller < 3) { }
    


  • Vielen Dank für die Antworten.
    Dabei wurden diese Semikola bewusst gesetzt, da der Aufbau der Do-while schleife gerade im Kopf war. Begann schon an meinen Verstand zu zweifeln,
    diesen Fehler mit den Semikola hätte ich wohl ewig und drei Tage gesucht.

    cu


Anmelden zum Antworten