sscanf problem
-
hallo,
ich hab ein Problem mit sscanf.
Aus einem File lese ich mit fgets() jede zeile (3436144 5791029 224)
aus und speichere sie in einem Array. Mit sscanf will ich die Zahlen
in einer Matrix speichern. Hier der Code.while (fgets(tmp,30,f) != NULL) {
ret = 0;
ret = 1 + sscanf (tmp,"%f", &matrix[i][0]);
printf("%i\n",ret);
ret += 1 + sscanf (tmp + ret,"%f", &matrix[i][1]);
sscanf (tmp + ret,"%f", &matrix[i][2]);
matrix[i][3] = -1;
i++;
}ret sollte die anzahl der gelesenen zeichen sein (+1 wegen der leerzeichen bzw tabs) und beim nächsten sscanf die anfangsposition zum lesen der nächsten Zahl.
das output ist aber:
3436144 36144 144
ret ist also immer nur 2 und nicht die tatsächliche zahl von zeichen.
Hat einer ne idee woran das liegen könnte bzw zur not eine elegante alternative
für das Problem ?Danke und Gruß,
jannico
-
Da Du ja weißt, wie viele Zahlen in Deinem tmp "drinstecken", kannst Du sscanf doch einfach so benutzen:
sscanf (tmp,"%f %f %f", &matrix[i][0], &matrix[i][1], &matrix[i][2]);
oder?
Edit: Der Rückgabewert von sscanf ist nicht - wie von Dir angenommen - die Anzahl der aus Deinem tmp gelesenen chars, sondern die Anzahl der Werte die erfolgreich an das Ziel von sscanf (hier: matrix[i]) übergeben wurden. Der Rückgabewert von
sscanf (tmp,"%f", &matrix[i][0]);
ist also 1.
Der Rückgabewert (wenn erfolgreich ausgelesen) vonsscanf (tmp,"%f %f", &matrix[i][0], &matrix[i][1]);
dementsprechend 2.
Allet klar?
-
äh ja ,
blöder Fehler. Dein Vorschlag funtioniert.
Danke und Gruß