Frage

Wie kann man wissen, dass fscanf eine neue Zeile \ n in einer Datei erreicht. Ich habe meine eigenen Funktionen wurde mit, dass zu tun. Ich weiß, ich kann fgets verwenden und dann sscanf für meine erforderlichen Muster. Aber meine Anforderungen nicht stabil sind, einige Male Ich möchte TAB bekommen Strings getrennt, einige Male neue Zeile getrennt Strings und einige Male einige Sonderzeichen getrennt Saiten. Also, wenn es irgendeine Art und Weise der neuen Linie von fscanf zu wissen, bitte helfen Sie mir. Oder aber alle alternativen Möglichkeiten sind auch willkommen.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

fscanf(stream, "%42[^\n]", buffer);

ist ein equivalant von fgets (buffer, 42, Strom). Sie können nicht die 42 * ersetzen, um die Pufferlänge in dem Argument angeben (wie Sie in printf tun können), seine Bedeutung ist die Zuordnung zu unterdrücken. So

fscanf(stream, "%*[^\n]%*c");

lesen bis zu (und enthalten) die nächste Zeilenende Zeichen.

Jeder Konvertierungsspezifizierer außer [, c und n beginnt mit Leerzeichen übersprungen wird.

Andere Tipps

Kernighan und Pike in dem ausgezeichneten Buch ‚ The Practice of Programming 'zeigt, wie sprintf() zu verwenden, um eine entsprechende Formatspezifizierer einschließlich der Länge (ähnlich die Beispiele in der Antwort von AProgrammer) zu erstellen, und dann das scanf() im Aufruf verwenden. Auf diese Weise können Sie auch die Separatoren steuern. Die Besorgnis über die ‚Ineffizienz‘ dieses Ansatzes sind wahrscheinlich fehlgeleitet - die Alternativen sind härter richtig zu machen

.

Das heißt, ich die meisten normalerweise nicht die scanf() Familie von Funktionen für Datei-I / O; Ich erhalte die Daten in einen String mit irgendeiner Art von Routine ‚get line‘ und dann die sscanf() Familie von Funktionen verwenden, um es aufzuteilen -. Oder andere speziellere Parsing-Code

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top