Passwortabfrage über String - do while Schleife funktioniert nicht
-
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 diedo ... 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.
-
Angeklagter, warum haben Sie das Opfer erstochen?
Ich bin hingegeangen und habe ihm das Messer in ihn reingesteckt.
(So war deine erste Antwort)Das wissen wir, aber warum haben sie das gemacht?
Weil man mit einem Messer nicht schiessen kann.
(So war deine zweite antwort)Das hohe Gericht möchte aber dein Motiv wissen.
(Notwehr, Eifersucht, Raubmord)
-
glühnase schrieb:
silent_max schrieb:
Weil man der Stringvariablen
e
"nur" einen Text übergeben kannDu weichst aus.
Die Frage war, warum du überhaupt dieses "Wort" dem String zuweist... Wieso tust du das?
<:xmas2:>
Meint ihr, warum ich das persönlich mache oder warum man das allgemein so macht oder auf was wollt ihr hinaus?
-
DirkB schrieb:
Das hohe Gericht möchte aber dein Motiv wissen.
(Notwehr, Eifersucht, Raubmord)Weil ich es eben einfach so getan habe...
-
Warum machst Du das in diesem Fall?
Deutlicher:
Warum weist Du e überhaupt irgendetwas zu?
Warum tust Du es an dieser Stelle?
Warum weist Du e genau diesen Inhalt zu?
-
silent_max schrieb:
Meint ihr, warum ich das persönlich mache oder warum man das allgemein so macht oder auf was wollt ihr hinaus?
Wir würden hier nicht so fragen, wenn das wirklich alle so machen.
Wobei es hier speziell um diesen Fall geht.
Es geht nicht darum, dass man i.A. Variablen initialisiert.
Warum hast du in diesem Fall, dieser Variablen diesen Wert zugewiesen?
-
silent_max schrieb:
DirkB schrieb:
Das hohe Gericht möchte aber dein Motiv wissen.
(Notwehr, Eifersucht, Raubmord)Weil ich es eben einfach so getan habe...
Okay, jetzt haben wir es glaube ich alle verstanden ...
-
silent_max schrieb:
Meint ihr, warum ich das persönlich mache oder warum man das allgemein so macht oder auf was wollt ihr hinaus?
Allgemein macht man das nicht. Die Frage zielt darauf ab, ob du verstehst, was du machst.
Wenn du das tust, solltest du in der Lage sein, ihn zu erklären. Erkläre daher mal, welchen Sinn die Zuweisung
Passwort = "1306*Vatertag";
in deinem ganzen Programm hat.<:xmas2:>
-
silent_max schrieb:
DirkB schrieb:
Das hohe Gericht möchte aber dein Motiv wissen.
(Notwehr, Eifersucht, Raubmord)Weil ich es eben einfach so getan habe...
Das demonstriert sehr gut den Kern deines Problems. Aber antworte mal auf glühnase.
-
Belli schrieb:
Warum machst Du das in diesem Fall?
Deutlicher:
Warum weist Du e überhaupt irgendetwas zu?
Warum tust Du es an dieser Stelle?
Warum weist Du e genau diesen Inhalt zu?Weil ich brauche ja eine Referenzvariable, mit der die Eingabe des Passwortes vergllichen wird...
Und deswegen habe ich durch
string e;
unde=1306*Vatertag;
erstellt, damit in derdo...while
Schleife der eingegebene Text mit dem Wert vone
in derif
Schleife verglichen werden kann...Ich hoffe, dass ich mich jetzt klar ausgedrückt habe?
-
Was hätte sich an deinem Programmablauf geändert, wenn du e mit
e= "Mistwetter"
initialisiert hättest?
-
Ja, hast Du ... endlich!
Jetzt weiter:
In der Folge kommt in Deinem Programm:cin >> e;
und zwar, bevor Du irgendetwas mit e machst. Damit bekommt e einen neuen Inhalt, und Deine ursprüngliche Zuweisung ist völlig überflüssig und sinnlos!
-
silent_max schrieb:
Und deswegen habe ich durch string e; und e=1306*Vatertag; erstellt, damit in der do...while Schleife der eingegebene Text mit dem Wert von e in der if Schleife verglichen werden kann...
Wo vergleichst du den eingegebenen Wert mit e?
if(e=="1306*Vatertag")
vergleicht e mit einer Konstante.
Also, wo tust du das? Du sagst du willst e mit dem eingegebenem Wert vergleichen. Wo machst du das? Wo ist etwas in der Artif(eingabe==e)
?
-
Belli schrieb:
Ja, hast Du ... endlich!
Jetzt weiter:
In der Folge kommt in Deinem Programm:cin >> e;
und zwar, bevor Du irgendetwas mit e machst. Damit bekommt e einen neuen Inhalt, und Deine ursprüngliche Zuweisung ist völlig überflüssig und sinnlos!
Stimmt...
cin >> e
muss ja dann auch in derdo...while
Schleife sein...
-
silent_max schrieb:
Stimmt...
cin >> e
muss ja dann auch in derdo...while
Schleife sein...Ich glaube der Funken ist mal wieder nicht übergesprungen.
-
silent_max schrieb:
Stimmt...
cin >> e
muss ja dann auch in derdo...while
Schleife sein...Darum geht es jetzt erst mal noch nicht. Eins nach dem anderen. Im Moment geht es erst mal darum, dass es keinen Sinn macht:
std::string e = "blabla"; cin >> e;
zu machen.
Und das ist das, worauf einige andere Dich seit langer Zeit aufmerksam zu machen versuchen:
Du musst bei jeder Instruktion in Deinem Programm wissen, wozu sie gut ist, und was Du damit beabsichtigst.
Und da in Deinem Code immer noch ständig solche sinnlosen Dinge stehen, erweckst Du den Eindruck, dass Du nicht willst oder nicht kannst ...
-
Bei jetzt insgesamt ca. 160 geschriebenen Projekten ist es wohl nicht eine Sache des Wollens sondern eine Sache des Nichtkönnens....
Ich bin echt kurz davor zu kapitulieren...
-
GanzEinfach... schrieb:
silent_max schrieb:
Stimmt...
cin >> e
muss ja dann auch in derdo...while
Schleife sein...Ich glaube der Funken ist mal wieder nicht übergesprungen.
Oh ja... (Auch wenn ich's irgendwie lustig finde)
Die ganze Art und Weise wie silent_max das angeht, ist einfach fundamental falsch. Hab so das Gefühl, er nimmt sich sinnbildlich einen Sack, in der er alle Dinge reintut die er so brauchen kann, und würfelt das dann mehr oder weniger zufällig zu etwas zusammen, was er Programm nennt. Und wenn er meint er hat was vergessen hat, wird das halt nochmal irgendwo zwischen reingeschoben.
Letzter Schritt ist dann, solange seine Teile hin und her zu schieben, bis es geht, und wenn das nicht klappt fragt er halt nach.Du musst Schrittweise und strukturiert rangehen. Und langsam.
Ich wollte einen Code generieren, mit dem ich ein Passwort abfragen kann.
Ok, das ist die Aufgabe. Mal ganz ehrlich, wie gehst du so ein Problem an?
-
silent_max schrieb:
Weil ich es eben einfach so getan habe...
Du bist ein potentieller Massenmörder.
-
silent_max schrieb:
Bei jetzt insgesamt ca. 160 geschriebenen Projekten ist es wohl nicht eine Sache des Wollens sondern eine Sache des Nichtkönnens....
Ich bin echt kurz davor zu kapitulieren...
Wie schlagen sich die anderen Schüler in Deinem Kurs?
Und ja, es ist nichts für Dich. Nach ein paar Tagen, vielleicht einer Woche, können totale Anfänger eigentlich schon besser programmieren und verstehen auch was sie da tun.
Deine Antworten sind oft sehr bezeichnend, z.b. weiter oben als Du angeblich verstanden hast, wie das mit der Variable und der do-while-Schleife funktioniert. Hatte auf mich den Eindruck, als hättest Du dieses Muster (Variable einlesen, dann im Schleifenkopf auf Abbruchbedingung vergleichen) völlig unverstanden in Deinen Werkzeugkasten gepackt um es in Zukunft unreflektiert einzusetzen. Bei kleinen Änderungen an der Aufgabenstellung scheitert dieser Ansatz aber, weil Du den Code nicht entsprechend anpassen kannst.
Wenn Du wirklich kein Troll bist, tut es mir leid, aber es ist hoffnungslos. Kommst Du nach der Prüfung nochmal mit Programmierung in Berührung?