Voranstehende Leerzeichen bei scanf mittels Formatstring wegschneiden
-
Hallo,
ich habe mich extra wegen dieser Frage hier angemeldet, weil ich obwohl ich die folgenden Referenzen benutzt habe nicht weiterkomme:
http://www2.informatik.uni-halle.de/lehre/c/c_scanf.html
http://openbook.galileocomputing.de/c_von_a_bis_z/011_c_arrays_012.htm
http://man7.org/linux/man-pages/man3/scanf.3.html
http://stackoverflow.com/questions/5292826/ignoring-whitespace-with-sscanf-in-cEs geht um folgendes:
Es soll eine Binärzahl eingegeben werden, doch sollen vorangestellte Leerzeichen, Zeilenumbrüche und Tabulatursprünge ignoriert werden.Beispiel:
Eingabe " 101" wird zu "101"Das ist mein Code:
int main(void){ char a[17]; /*char b[17];*/ printf("Bitte Zahl a eingeben:"); scanf("%*[ \n\t]%[0-1]16c", &a[0]); printf("%s", a); return 0; }
Was ich bereits selbst herausgefunden habe ist, dass %*[ \n\t] mindestens EIN vorkommen eines whitespaces, tabs oder carriage returns braucht, weshalb das Programm NICHT geht, wenn man NUR die Binärzahl eingibt.
Also nochmal zusammengefasst:
Bei der Eingabe " 101" spuckt das Programm "101" aus - so soll es sein!
Bei der Eingabe "101" spuckt das Programm aber Kauderwelsch aus...Ich möchte also die Anweise %*[...] so gestalten, dass Sie also 0, 1 oder n-mal vorkommen kann, so wie in den Auszeichnungssprachen.
Ist das möglich?
Gruß
K3ltis
-
Ein Leerzeichen im Formatstring überliest schon alle Whitespace.
scanf(" %16[01]", a); // Whitespace überlesen und nur 0 und 1 akzeptieren.
müsste das geforderte machen.
Was sollte eigentlich das 16c am Ende vom Formatstring?
-
Vielen Dank!!!
Wenn man zu dem whitespace im Formatstring noch ein "\n\t" hinzufügt, werden auch wie gewünscht tabs und carriage returns übersprungen!
Das 16c begrenzt die maximal eingelesenen Zeichen auf 16 Stück, da es sich ja hier um eine 16 bit Binärzahl handeln soll, die eingelesen wird.
Grüße
-
\n und \t sind Whitespace. Die werden mit dem Leerzeichen schon überlesen.
Der Formatspecifier ist das [ (zum Abschluss gehört noch die ])
Alles danach hättest du eingeben müssen. (also hättest du 16c eintippen müssen)
Darum gehört die 16 vor die [
-
Verdammt, du hast ja Recht! C ist aber auch 0% fehlerverzeihend.
Danke dir!
-
k3ltis schrieb:
C ist aber auch 0% fehlerverzeihend.
C ist auch für echte MännerInnen*.
*Boah, was für ein Scheißwort