Passwortabfrage über String - do while Schleife funktioniert nicht



  • Hallo und guten morgen liebe Gemeinde.

    Ich wollte einen Code generieren, mit dem ich ein Passwort abfragen kann.

    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 jetzt int number nicht initialisiere, bekomme ich die Fehlermeldung, dass number nicht initialisirt ist. Wenn ich jedoch number mit 0 initialisier, dann läuft die do ... while Schleife nur einmal durch.

    Wo ist mein Denkfehler?

    Danke für die Antworten im Voraus.

    Gruß Max



  • Du benutzt number doch gar nicht, außer als Bedingung der Schleife...



  • Wäre es dann klüger, das über eine while Schleife zu machen??



  • Über 300 Beiträge 😮

    Wovon hängt das ab, das eine do-while-Schleife durch läuft oder beendet wird 😕
    Beeinflusse diese Ursache innerhalb der Schleife.

    Die Frage hast du zu Teil schon beantwortet, aber nicht verstanden. 😕



  • Gib es einfach auf. Dein Code wirkt genauso unverstanden abgeschrieben wie noch vor einem Monat. Solche Aufgaben kann man normalerweise nach einem Tag. Du scheinst null Verständnis dafür zu haben, was die einzelnen Zeilen machen. Und die Tatsache, dass du dort völlig sinnlose Anweisungen drin hast (Zeile 8 WTF) zeigt auch, dass du dir nicht mal Gedanken darüber gemacht hast. Programmieren ist einfach nichts für dich. Oder du machst mal ein Jahr pause und probierst es dann noch mal.



  • Zu langsam 😉

    Mit while hast du doch das gleiche Problem, oder?
    Du weisst nicht was du da schreiben sollst damit die läuft oder beendet wird?

    Wenn du die eine Varinante begriffen hast, sollte die andere kein Problem sein.



  • DieWahrheit schrieb:

    Gib es einfach auf. Dein Code wirkt genauso unverstanden abgeschrieben wie noch vor einem Monat. Solche Aufgaben kann man normalerweise nach einem Tag. Du scheinst null Verständnis dafür zu haben, was die einzelnen Zeilen machen. Und die Tatsache, dass du dort völlig sinnlose Anweisungen drin hast (Zeile 8 WTF) zeigt auch, dass du dir nicht mal Gedanken darüber gemacht hast. Programmieren ist einfach nichts für dich. Oder du machst mal ein Jahr pause und probierst es dann noch mal.

    Habt ihr mich jetzt alle auf den Kicker oder wie??

    Edit:

    Selbst das klappt nicht:

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


  • Nimm es als ernst gemeinten Rat auf. Warte noch ein Jahr und komm dann wieder.

    Hat mir auch geholfen.



  • otze schrieb:

    Nimm es als ernst gemeinten Rat auf. Warte noch ein Jahr und komm dann wieder.

    Ich würde gern diesen Rat in die Tat umsetzen, bloß einerseits habe ich in nicht einmal 2 Wochen eine wichtige Prüfung und zum anderen schreibe ich im Sommer 2013 die Abschlussprüfung im Fach Datenverarbeitungstechnik, wo ca. 75% der Prüfung aus C++ besteht.

    Können wir da keinen Kompromiss finden?



  • silent_max schrieb:

    Habt ihr mich jetzt alle auf den Kicker oder wie??

    Du schaffst es seit 2 Monaten nicht eine while Schleife zu verstehen. Oder überhaupt irgendetwas über den Programmablauf. Dein Code ist so unglaublich haarsträubend für jeden der länger als eine Woche programmiert hat, dass das die einzig logische Schlussfolgerung ist. PS: Dein neuer Code macht genau so wenig Sinn. Ich wüsste nicht mal genau was du erreichen willst, so wirr ist das. Programmieren ist nicht rum raten. Du musst genau wissen was du willst, und du musst genau wissen wozu jede einzelne Anweisung in deinem Code steht.



  • "Sonderzeichen" wie 'ß' oder ähnliche sollte man möglichst meiden. Die machen bei Quelltexten oft Ärger. Okay, wenn man weiss wie es geht, geht auch das.

    Nimm statt 'ß' zum Üben einen selten genutzten Buchstaben. Wie wäre es mit 'q'?



  • Mal langsam ...

    Eine do...while Schleife soll doch mindestens einmal durchlaufen, während die Bedingung zu Schluss abgefragt wird.

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

    Oder liege ich falsch?



  • 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??


Anmelden zum Antworten