scanf() und fscanf() Fragen



  • 1. Enfernt scanf() NIEMALS das zum Abschließen der Eingabe notwendige '\n' Zeichen, d.h. eine Schleife while(getchar()!='\n') direkt nach einer scanf Anweisung läuft NIEMALS Gefahr, eine Endlosschleife zu sein?

    2. Benötigt auch fscanf() innerhalb von Dateien ein '\n' Zeichen, um zum Aufrufer zurückkehren zu können? (Angeblich ist ja fscanf(stdin) ähnlich wie scanf()!).
    Oder bricht fscanf() automatisch (auch ohne ein '\n' Zeichen) dann ab, wenn genügend Werte an die Variablen zugewiesen werden konnten, d.h. der FilePointer müsste dann genau auf dem ersten Byte hinter dem letzten gefundenen+zugewiesenen Wert stehen?

    Danke für Tipps und Erläuterungen!



  • 0. Alle Funktionen der scanf()-Familie arbeiten gleich, der einzige Unterschied ist die Quelle, von der sie ihre Daten bekommen (scanf()-Tastatur, fscanf()-Datei, sscanf()-char-Array).

    1. scanf() liest solange, bis es den kompletten Formatstring abgearbeitet hat (oder ein Fehler aufgetreten ist. Das heißt, am Ende bleibt das erste Zeichen im Speicher stehen, das nicht zum Formatstring gepasst hat (und das ist typischerweise das \n). Afaik gibt es auch Möglichkeiten, im scanf() selber das Zeilenende abzufangen, aber auch dann hast du mit dem while(getchar()!='\n'); keine Endlosschleife, sondern wartest nur auf das nächste ENTER.
    (zur Sicherheit könntest du die Bedingung ergänzen um ein &&!feof(stdin) )

    2. scanf() benötigt selber kein ENTER - das \n wird als ganz normales Whitespace behandelt. Die ENTER-Taste hat nur vor deiner Verarbeitung eine Bedeutung, um die Eingabezeile aus dem Tastaturpuffer an dein Programm weiterzugeben.


Anmelden zum Antworten