Hallo Liste, ich weiß, dass dies hier nicht die Developer-Liste ist. Da ich aber leider nur hier Mitglied bin (und sein möchte), erlaube ich mir die Frage hier zu stellen: In einem C-Programm (check_ping von Nagios) gibt's Probleme bei Float-Zahlen: Vertauschungen zwischen "." und "," als Komma. In einem Testprogramm, das ich ganz einfach mit gcc kompiliere, paßt alles. printf("Float-Zahl: %f",f1); ergibt z.B.: 12,34567 statt: 12.34567 Selbiges passiert beim sscanf, folglich wird die Rückgabe des Ping-Befehls auch nicht erkannt. Werden da irgendwo die LOCALE-Einstellungen (deutsches Komma) herangezogen? Wie kann ich das ändern?? Danke im voraus, Günther
Günther Zinsberger
In einem Testprogramm, das ich ganz einfach mit gcc kompiliere, paßt alles.
printf("Float-Zahl: %f",f1);
ergibt z.B.: 12,34567 statt: 12.34567
Selbiges passiert beim sscanf, folglich wird die Rückgabe des Ping-Befehls auch nicht erkannt.
Das Aus- und Eingabe-Format ist von der gesetzten locale abhängig. Die wird aber *nur* gesetzt, wenn das Programm explizit setlocale() verwendet. Und wenn setlocale keine locale übergeben wird, wird die im System gesetzte verwendet. Ausserdem beeinflusst die gesetzte locale das Verhalten der is* Funktionen aus ctype.h.
Werden da irgendwo die LOCALE-Einstellungen (deutsches Komma) herangezogen? Wie kann ich das ändern??
Nein. Aber ich glaube auch nicht, dass ohne explizites setlocale() im Programm sich da was ändert. Philipp
Hallo Philipp! Danke schon mal für Deine Hilfe. Philipp Thomas schrieb:
Günther Zinsberger
[Di, 09 Nov 2004 18:29]: printf("Float-Zahl: %f",f1);
ergibt z.B.: 12,34567 statt: 12.34567
Das Aus- und Eingabe-Format ist von der gesetzten locale abhängig. Die wird aber *nur* gesetzt, wenn das Programm explizit setlocale() verwendet. Und wenn setlocale keine locale übergeben wird, wird die im System gesetzte verwendet. Ausserdem beeinflusst die gesetzte locale das Verhalten der is* Funktionen aus ctype.h.
Werden da irgendwo die LOCALE-Einstellungen (deutsches Komma) herangezogen? Wie kann ich das ändern??
Nein. Aber ich glaube auch nicht, dass ohne explizites setlocale() im Programm sich da was ändert.
Doch! direkt im "main", ziemlich am Anfang: setlocale (LC_ALL, ""); Was bedeutet "LC_ALL" ? "." oder "," ? Soll ich es vorsichtig entfernen? Danke im voraus, Günther
Günther Zinsberger
Philipp Thomas schrieb:
Nein. Aber ich glaube auch nicht, dass ohne explizites setlocale() im Programm sich da was ändert.
Doch! direkt im "main", ziemlich am Anfang:
setlocale (LC_ALL, "");
Was bedeutet "LC_ALL" ? "." oder "," ?
LC_ALL bedeutet alle Kategorien, also einschliesslich LC_NUMERIC, welches die Informationen für die Ausgabe numerischer Werte beinhaltet.
Soll ich es vorsichtig entfernen?
Nur wenn du auch auf jede andere Unterstützung wie z.B. lokalisierte Meldungen des Programms verzichten kannst. Ich würde aber nicht in das Programm eingreifen sondern es einfach mit "LANG=C <programm>" aufrufen. Ansonsten empfehle ich "man setlocale" und "info libc" zum selben Thema. Philipp
Hallo, Am Tue, 09 Nov 2004, Günther Zinsberger schrieb:
In einem C-Programm (check_ping von Nagios) gibt's Probleme bei Float-Zahlen: Vertauschungen zwischen "." und "," als Komma. [..] Werden da irgendwo die LOCALE-Einstellungen (deutsches Komma) herangezogen?
Ja.
Wie kann ich das ändern??
man 3 setlocale -dnh -- 6: Globale Variable Parameterübergabemechanismus in 4GLs (Marit Köhntopp)
participants (3)
-
David Haller
-
Günther Zinsberger
-
Philipp Thomas