Scanf liest "\n" ein. Wie kann man das verhindern?
Hallo,
ich möchte ein Programm schreiben welches ein Passwort verwendet. Dafür möchte ich dieses in einer Dauerschleife abfragen. Beim ersten mal liest er auch nur das Passwort ein, beim zweiten und dritten mal liest er aber auch den Zeilenumbruch mit ein. Im Folgenden ist ein Beispiel-Programm zu sehen:
und das ist die Ausgabe ("!" ist eigentlich ein Zeilenumbruch):
Ich grüble schon echt lange an diesem Problem.
Vielen Dank im Voraus!
5 Antworten
nicht als %4c scannen, sondern als string. Denn der Zeilenumbruch wird als eines der 4 zu scannenen Zeichen mit code 13 angesehen. Also %4s oder so denke ich ... oder nur %s. Und dann Umwandlung in char.
Leere dienen Inputbuffer vor dem Einlesen.
int c;
while ((c = getchar()) != '\n' && c != EOF) { }
https://stackoverflow.com/questions/7898215/how-to-clear-input-buffer-in-c
EOF steht für End of file und wird von getchar zurückgegeben, wenn der Bufffer, aus dem es liest, leer ist.
Ich bin nicht ganz sicher, ob ich dein Problem richtig verstanden habe. Aber wärse nicht besser wenn du in der if-Anweisung dein v dekrementierst, also v--, machst um den Index zurücksetzen. Dann sollte bei Eingabe des entsprechenden Zeichen de facto nichts passieren.
Dein Passwort hat doch nur 4 Zeichen oder?
Wenn du immer von 0 - 5 interierst hast du aber 5 Schleifendurchläufe.
0, 1, 2, 3, 4
Kann das einfach daran liegen?
schreibe ein Filter, indem Du jedes Zeichen prüfst und zu einem neuen Wort zusammensetzt.
Also etwas in der Art
myString=' '; /* für leer */
If Zeichen <> '/n' then myString = myString + Zeichen;
Ist E0F der hexcode für \n?