Scanf liest "\n" ein. Wie kann man das verhindern?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

nicigomez123 
Fragesteller
 24.03.2020, 14:51

nur mit %s hat es geklappt. Danke :)

0

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

nicigomez123 
Fragesteller
 24.03.2020, 14:30

Ist E0F der hexcode für \n?

0
Destranix  24.03.2020, 14:32
@nicigomez123

EOF steht für End of file und wird von getchar zurückgegeben, wenn der Bufffer, aus dem es liest, leer ist.

1

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?

Woher ich das weiß:Studium / Ausbildung – Informatikstudium für 4 Jahre, Ausbildung FIAE

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;

Woher ich das weiß:Berufserfahrung – ich arbeite schon sehr lange im EDV Bereich, viele Sparten