sscanf %[lenght]d verhält sich anders als erwartet
-
ich muss geografische Koordinaten parsen, die folgendermaßen aufgeschrieben wurden:
N 51° 26.5' E 7° 12.4' wird dargestellt als
N5126.5E00712.4Also ohne Trennezeichen (sogar ohne Leerzeichen) zwischen Grad und Minuten-Anteil, dafür garantiert mit führenden Nullen aufgefüllt, damit die Grad-zahl immer zweistellig bei der Länge und dreistellig bei der Breite ist.
Ich versuche das mit sscanf einzulesen:
char l, b; int lgrad, bgrad; float lmin, bmin; sscanf("N5026.5E00712.4", "%c%2d%f%c%3d%f", &l, &lgrad, &lmin, &b, &bgrad, &bmin);
Leider funktioniert das nicht, weil sscanf nicht 6 zurückgibt, sondern 5. Ich vermute mal, dass er über die direkt an den integer geketteten float stolpert. Dabei dachte ich, %[Länge]d sei genau dafür da?
-
Er (der Compiler) stolpert nicht. Du stolperst.
In diesem Fall über das 26.5 folgende 'E', welches die float-Konvertierung (optional) mit berücksichtigt. Funktionieren sollte somit:"%c%2d%4f%c%3d%f"
-
Danke, das funktioniert.
Klar, auch ein großes E geht ja als exponent durch. Was ein Glück, dass ich mit östlichen Koordinaten getestet habe. Wenn ich durch einen dummen Zufall mit den westlichen angefangen hätte, wär mir der Fehler wahrscheinlich erst zu spät aufgefallen *headdesk*