P
W2K2005 schrieb:
Hi,
angenommen ich habe 3 Werte mit fscanf eingelesen und die Zeile endet hier tatsächlich - würde fscanf mich dann nicht bereits in die nächste Zeile katapultieren, so dass ich die Werte dort nicht mehr mit fscanf erfassen kann ????
231 11 21 1 5
40 10 12 1
Kannst Du mir noch einen Hinweis geben, wo ich nachlesen kann, wie man eine Funktion mit einer optionalen Parameterliste definiert? Ich möchte all die Infos, die Du mir hast zukommen lassen in einer Funktion verarbeiten, die den Einleseformalismus automatisch steuert!
Hierzu wollte ich der Funktion eine Liste mit Paramtern übergeben - kein Feld!
Ich schrieb bereits, daß fscanf() dort stehen bleibt, wo der letzte Parameter gelesen wurde.
Also, nimm mal folgende Zeilen an:
231 11 21 1 5
40 10 12 1
char buf[100];
int a, b, c, d, e;
fscanf( fp, "%d %d %d %d %d", &a, &b, &c, &d, &e ); /* liest 231 11 21 1 5 nach a b c d e */
fscanf( fp, "%d %d %d %d", &a, &b, &c, &d ); /* liest 40 10 12 1 nach a b c d */
rewind( fp ); /* zurück an den Anfang */
fscanf( fp, "%*d %d %d %d %*d", &a, &b, &c ); /* ignoriert 231, liest 11 21 1 nach a b c, ignoriert 5 */
fscanf( fp, "%*d %d %d %d", &a, &b, &c ); /* ignoriert 40, liest 10 12 1 nach a b c */
rewind( fp ); /* zurück an den Anfang */
fscanf( fp, "%*d %d %d %d ", &a, &b, &c ); /* ignoriert 231, liest 11 21 1 nach a b c, Dateizeiger steht jetzt auf "5" */
fgets( buf, 100, fp ); /* liest "5\n" nach buf */
fscanf( fp, "%s %d %d %d", buf, &a, &b, &c ); /* liest 40 10 12 1 nach buf a b c */
Variable Argumentliste geht so:
#include <stdarg.h>
#include <stdio.h>
void func( int anz, ... ) {
va_list ap; int i;
va_start( ap, anz );
for ( i=0; i < anz; ++i ) {
int a = va_arg( ap, int );
printf( "arg %d = %d\n", i, a );
}
va_end( ap );
}