Ich verwende scanf, um sehr regelmäßige tabellarische Daten zu extrahieren. Ich muss es in zwei Durchgängen durchgehen und kann einige der Argumente einigermaßen ignorieren. Ich möchte nur Platz für die Zeichenfolgen reservieren, die mir wichtig sind, und eine einzelne "Verwerfen" -Zeichenfolge für die anderen. Wenn ich dieses Argument mehrmals als Ausgabe übergebe, ist das Verhalten definiert?
Ein dummes minimales Beispiel:
%Vor%Ich kann im C11-Standard keine Sprache finden, die Ihre beabsichtigte Verwendung ungültig macht.
Es scheint jedoch eine bessere Lösung zu geben. Wenn Sie ein *
("Zuordnungsunterdrückungscharakter") nach dem %
in der Formatzeichenfolge platzieren, wird die scanf
-Funktion das Eingabeelement analysieren, aber nicht speichern. Daher müssen Sie (eigentlich nicht) ein Zielargument dafür angeben. Scheint genau das zu sein, was du hier brauchst.
Wenn ich dieses Argument mehrmals als Ausgabe übergebe, ist das Verhalten definiert?
C11 zitieren:
%Vor%7.21.6.2 Die fscanf-Funktion
- Die fscanf-Funktion führt nacheinander jede Anweisung des Formats aus . Wenn alle Anweisungen ausgeführt wurden oder eine Anweisung fehlschlägt (wie unten beschrieben), gibt die Funktion zurück.
Die Funktion fscanf
(und daher sscanf
) führt jede Anweisung des Formats wiederum aus , daher sollte es keine Probleme geben, discard
-Parameter mehrmals als letzte Zuweisung zuzuordnen hätte den endgültigen Effekt (die vorherigen Zuweisungen überschreiben).