Hallo Ubuntuusers.
Ich habe mich in GTK3 eingearbeitet, um meine alten Windows Programme nach Linux zu portieren. Dabei bin ich auf folgendes gestoßen, was ich zwar schon erkannt habe, aber keine professionelle Lösung dafür gefunden habe.
In meinem alten Windowsprogramm gibt es die folgenden Zeilen C-Code:
1 2 3 4 5 6 | //Die verwendeten Variablen... double x_wert_d; //zur Aufnahme X-Wert. double y_wert_d; //zur Aufnahme Y-Wert. char OneLine[50]; //zur Aufnahme einer Zeile aus der Datei. //Die Zeile zum Erkennen der Double Werte und wo das Problem nun unter Linux liegt... int ZahlLesen = sscanf(OneLine, "G0 X%lf Y%lf", &x_wert_d, &y_wert_d); |
Dieser Codeabschnitt bzw. diese Codezeile hat auch immer die Werte unter Windows ohne Probleme richtig in die Variablen eingelesen. Die Werte waren in dieser Art: z.B: 123.456 oder 23.123. Jetzt habe ich per Kopie diesen Codeabschnitt in mein Linuxprogramm bzw. GTK-Programmcode eingefügt. Das Öffnen der Datei, das Auslesen einer Zeile in "OneLine", alles funktioniert wie beim Windowsprogramm auch. Nur das erkennen der Double Werte funktioniert jetzt auf einmal nicht mehr!
Es wird vom ersten Wert (x_wert_d) nur die Ganzzahl aber nicht die Nachkommastelle eingelesen. Dadurch passt das Ganze für sscanf nicht mehr und deshalb wird der Y-Wert erst gar nicht eingelesen! Habe im Netz gelesen, das es an dem Punkt - Komma liegen sollte. Die Funktion sscanf erwartet ein Komma. um ordentlich funktionieren zu können. Die Werte haben aber einen Punkt als Kommazeichen. Nur komisch ist, das es im Windowsprogramm auch mit Punkt funktioniert. Es wird exakt die selbe Ausgangsdatei benutzt!
Jetzt aber zu der eigentlichen Frage:
Gibt es eine Möglichkeit sscanf auch für Double- oder Float- Zahlen mit Punkt zu verwenden?
Ich hätte ja sogar 2 Lösungsmöglichkeiten! Diese würden aber andere Probleme mit sich bringen. 1. Die Nachkommastelle hinter dem Punkt separat noch einlesen und mit dem Ganzwert zusammen zu fügen. Funktioniert sehr gut, aber was ist wenn eines Tages in der Ausgangsdatei doch ein Komma verwendet wird? Also auch nicht so die richtige Lösung!!! 2. Den Zahlenwert erst einmal als String mit Punkt komplett einlesen und dann aus dem String ein Double-Wert machen. Das funktioniert auch sehr gut, bedarf aber auch eines entsprechenden Mehraufwandes... wo ich mir gut vorstellen könnte, das es doch eine einfache Lösung mit sscanf dafür gibt. Aber welche? Habt Ihr eine Idee? Und warum funktionierte es super im Windowsprogramm, aber unter Linux- bzw. GTK-Programm nicht?
Danke euch schon mal für eure Hilfe. Gruß Tom.