Passwortabfrage über String - do while Schleife funktioniert nicht



  • Ne, das passt.

    Aber, wenn du die Bedingung in der Schleife nicht änderst, warum soll die Schleife ihr Verhalten ändern 😕



  • f.-th. schrieb:

    Aber, wenn du die Bedingung in der Schleife nicht änderst, warum soll die Schleife ihr Verhalten ändern 😕

    Genau das Verstehe ich ja im Moment nicht...

    Die Bedingung ist doch solange e ungleich q(e!=q) ist, soll die Schleife durchlaufen. Das hat doch nichts mit dem zu tun, was in der Schleife steht...



  • Dann lies es nochmal. Und nochmal

    solange bla ungleich blubb ist.
    Was passiert aber wenn bla gleich blubb ist?
    Egal ob bla jetzt number oder e heißt.

    Du hast number auf 0 gesetzt.
    Damit ist die Bedingung number != 0 unwahr.



  • Das du ja Schwierigkeiten hast mit dem Verstehen hast, mal so

    do
        {   // ab hier bis zur while-Zeile musst du etwas mit e machen!!!
            cout << "Wie lautet das Passwort?\n";
            cin  >> Passwort;
            if(Passwort=="1306*Vatertag")
                cout << "Richtig eingegeben";
            else
                cout << "Nicht richtig eingegeben!\n";
        }while(e!='q');
    }
    

    Warum weigerst du dich den Kommentar im Quelltext zu verstehen 😕



  • Zwar ist das jetzt offtopic, aber hier hätte ich einmal einen Programmcode, bei dem auch eine do ... while Schleife zum Einsatz kommt...

    #include <iostream>
    #include "Addition.h"
    #include "Subtraktion.h"
    #include "Multiplikation.h"
    #include "Division.h"
    using namespace std;
    
    int main()
    {
    	int number;
    
    	do
    	{
    		float x, y,z;
    		float *px = &x;
    		float *py = &y;
    		float *pz = &z;
    
    		cout << "Welche Rechenoperation wollen Sie durchfuehren?\n";
    		cout << "(1) Addition \n";
    		cout << "(2) Subtraktion \n";
    		cout << "(3) Multiplikation \n ";
    		cout << "(4) Division \n";
    		cout << "(0) Exit! \n";
    		cin  >> number;
    
    		switch(number)
    		{
    			case 1:
    				cout << "Addition!\n";
    				cout << "Geben Sie dazu zwei Zahlen ein!\n";
    				cin  >> *px >> *py;
    
    				*pz = *px + *py;
    
    				cout << *px << " + " << *py << " = " << *pz << "\n";
    
    				break;
    
    			case 2:
    				cout << "Subtraktion!\n";
    				cout << "Geben Sie dazu zwei Zahlen ein!\n";
    				cin  >> *px >> *py;
    
    				*pz = *px - *py;
    
    				cout << *px << " - " << *py << " = " << *pz << "\n";
    
    				break;
    
    			case 3:
    				cout << "Multiplikation!\n";
    				cout << "Geben Sie dazu zwei Zahlen ein!\n";
    				cin  >> *px >> *py;
    
    				*pz = (*px) * (*py);
    
    				cout << *px << " * " << *py << " = " << *pz << "\n";
    
    				break;
    
    			case 4:
    				cout << "Division!\n";
    				cout << "Geben Sie dazu zwei Zahlen ein!\n";
    				cin  >> *px >> *py;
    
    				*pz = (*px) / (*py);
    
    				cout << *px << " / " << *py << " = " << *pz << "\n";
    
    				break;
    
    			case 0:
    				cout << "Exit durch Abbruch!\n";
    				break;
    
    		}
    	}while(number!=0);
    
    	return 0;
    }
    

    Da habe ich auch mit folgenden gearbeitet:
    1.) int number
    2.) do{...}while(number!=0)

    Und genau das verstehe ich im Moment nicht... Beim Taschenrechner über Pointer funktioniert es und bei der Passwortabfrage über String funktioniert es nicht...



  • silent_max schrieb:

    Wenn die Bedinung nicht erfüllt wird, dann wird doch zurück zum Anfang gesprungen.

    Himmel.
    Ein Rücksprung zum Anfang erfolgt, wenn die Bedinung WAHR ist.

    e=='q', damit ist die Bedingung e!='q' FALSCH und die Schleife wird nicht erneut ausgeführt.

    Troll Dich doch...



  • int number = 0;  // number ist jetzt gleich 0;
        do
        {
        }while( number != 0);  // Weitermachen (mit der Schleife) wenn number ungleich 0
    }
    

    Wie oft wird die Schleife durchlaufen?



  • f.-th. schrieb:

    Warum weigerst du dich den Kommentar im Quelltext zu verstehen 😕

    Sie meinen Taschenrechner über Pointer...

    Da habe ich am Anfang auch nur int number; deklariert und bei der do...while Schleife als Bedingung [c]while(number!=0) gesetzt. Nichts gegen Dich, f.-th., aber warum soll ich es denn bei dem Code für das Passwort anders machen??



  • silent_max schrieb:

    f.-th. schrieb:

    Warum weigerst du dich den Kommentar im Quelltext zu verstehen 😕

    Sie meinen Taschenrechner über Pointer...

    Da habe ich am Anfang auch nur int number; deklariert und bei der do...while Schleife als Bedingung [c]while(number!=0) gesetzt. Nichts gegen Dich, f.-th., aber warum soll ich es denn bei dem Code für das Passwort anders machen??

    Du Veränderst die Variable in deinem Dreckcode für die Passwort-Abfrage nicht innerhalb der Schleife. Deshalb wird die Schleife einmal oder unendlich oft ausgeführt, je nach Anfangsbelegung.

    Ich muss sone langsam zustimmen -> Geistige Behinderung oder Lernschwäche.



  • silent_max schrieb:

    /*...*/
    
    int main()
    {
    	int number;
    
    	do
    	{
    		/*...*/
    
    		cin  >> number;
    
    		/*...*/
    
    	}while(number!=0);
    
    	/*...*/
    }
    

    ... Teil der Bedingung ( number ) im Schleifenkörper veränderlich.

    silent_max schrieb:

    /*...*/
    
    int main()
    {
    	/*...*/
    
    	char e='ß';
    	
    	/*...*/
    
    	do
    	{
    		/*...*/
    
    	}while(e!='ß');
    
    	/*...*/
    }
    

    ... Teil der Bedingung ( e ) im Schleifenkörper nicht veränderlich.



  • Ok

    Swordfish schrieb:

    ... Teil der Bedingung ( e ) im Schleifenkörper nicht veränderlich.

    Jetzt habe ich es kapiert... also muss die Variable, die ich als Bedingung setze, veränderbar sein.

    Hier jetzt der Programmcode, der funktioniert:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string e;
    	e = "1306*Vatertag";
    
    	cout << "\n";
    	cout << "\tPasswortabfrage!\n";
    	cout << "\n";
    
    	do
    	{ 
    		cout << "Wie lautet das Passwort?\n";
    		cin  >> e;
    		if(e=="1306*Vatertag")
    			cout << "Richtig eingegeben";
    		else
    			cout << "Nicht richtig eingegeben!\n";
    	}while(e!="1306*Vatertag");
    	return 0;
    }
    

    Edit:

    Wer ist eigentlich noch der Meinung, dass ich nur Scheiße produziere??????



  • silent_max schrieb:

    Wer ist eigentlich noch der Meinung, dass ich nur Scheiße produziere??????

    Frag lieber mal, wer nicht dieser Meinung ist.



  • [quote="DieWahrheit"]

    silent_max schrieb:

    Frag lieber mal, wer nicht dieser Meinung ist.

    Also, wer ist nicht der Meinung, dass ich nur Scheiße produziere??



  • silent_max schrieb:

    Edit:

    Wer ist eigentlich noch der Meinung, dass ich nur Scheiße produziere??????

    Ich



  • silent_max schrieb:

    Wer ist eigentlich noch der Meinung, dass ich nur Scheiße produziere??????

    Man sieht Deinem Code einfach an, dass Du sogar die einfachsten Sprachmittel nicht verstanden hast und so gut wie nichts über den Programmablauf weißt.

    Ein Beispiel, erkläre mal bitte diese Zeilen:

    string e;
    e = "1306*Vatertag";
    

    Warum exakt belegst Du e mit diesem Wert an dieser Stelle?



  • GanzEinfach... schrieb:

    Ein Beispiel, erkläre mal bitte diese Zeilen:

    string e;
    e = "1306*Vatertag";
    

    Warum exakt belegst Du e mit diesem Wert an dieser Stelle?

    string e : e soll vom Typ String sein
    e="1306*Vatertag : In der Stringvariablen e soll das Wort 1306*Vatertag stehen

    Wobei man auch string e = "1306*Vatertag schreiben hätte können.

    Oder liege ich falsch????????????



  • Damit beschreibst du was du machst, nicht warum du es machst.
    (Dieses Missverständnis ist eins deiner Probleme)

    Warum also machst du das?
    Warum weist du an dieser Stelle der Variablen e diesen bestimmten Wert zu?



  • DirkB schrieb:

    Warum weist du an dieser Stelle der Variablen e diesen bestimmten Wert zu?

    Weil man der Stringvariablen e "nur" einen Text übergeben kann



  • silent_max schrieb:

    Weil man der Stringvariablen e "nur" einen Text übergeben kann

    Du weichst aus.

    Die Frage war, warum du überhaupt dieses "Wort" dem String zuweist... Wieso tust du das?

    <:xmas2:>



  • silent_max schrieb:

    Hier einmal der Code, den ich geschrieben habe:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string Passwort;
    	Passwort = "1306*Vatertag";
    	int number;
    
    	cout << "\n";
    	cout << "\tPasswortabfrage!\n";
    	cout << "\n";
    
    	cout << "Wie lautet das Passwort?\n";
    	cin  >> Passwort;
    	
    	do
    	{
    		if(Passwort=="1306*Vatertag")
    			cout << "Richtige eingegeben";
    		else
    			cout << "Nicht richtig eingegeben!\n";
    	}while(number!=0);
    	return 0;
    }
    

    Wenn ich jedoch number mit 0 initialisier, dann läuft die do ... while Schleife nur einmal durch.

    Wo ist mein Denkfehler?

    Ich gehe noch einmal konkret auf Deine Frage ein:

    ...
    	}while(number!=0);
    ...
    

    Bedeutet: Solange number ungleich 0 ist. Da Du number mit 0 initialisiert hast, ist number nicht ungleich 0, deshalb wird die Schleife sofort beendet.


Anmelden zum Antworten