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

5 Antworten

Vom Beitragsersteller 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 
Beitragsersteller
 24.03.2020, 14:51

nur mit %s hat es geklappt. Danke :)

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 
Beitragsersteller
 24.03.2020, 14:30

Ist E0F der hexcode für \n?

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.

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