snprintf(%0.1) mit Dezimal-"Komma" ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
klaus
Beiträge: 102
Registriert: 09.06.2003 11:32:10

snprintf(%0.1) mit Dezimal-"Komma" ?

Beitrag von klaus » 25.04.2006 08:58:42

Moin,

ein Frage zu snprintf(). Und zwar möchte ich double Werte mit
snprintf in eine .csv-Datei ausgeben, und zwar am besten mit
dem Komma als Dezimalzeichen

Kann man irgendwo die Region oder den Zeichensatz unter C einstellen?


Vielen Dank
Matthias

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 25.04.2006 09:18:48

geht mit setlocale, hat aber auch den Nachteil, daß die entsprechende locale generiert sein muß.

Code: Alles auswählen

root@gms4:~# cat x.c
#include <stdio.h>
#include <locale.h>

int main() {
  double n=3.1415926;
  char szBuffer[1024];

  if (!setlocale(LC_NUMERIC,"de_AT@euro"))
    fprintf(stderr,"failed to set locale to \"de_AT@euro\"\n");
  snprintf(szBuffer,1024,"%f",n);
  printf ("%s\n",szBuffer);

  if (!setlocale(LC_NUMERIC,"C"))
    fprintf(stderr,"failed to set locale to \"C\"\n");
  snprintf(szBuffer,1024,"%f",n);
  printf ("%s\n",szBuffer);
}
root@gms4:~# gcc -o x x.c
root@gms4:~# ./x
3,141593
3.141593

Gruß
gms

klaus
Beiträge: 102
Registriert: 09.06.2003 11:32:10

Beitrag von klaus » 25.04.2006 10:43:51

MOin gms,

Danke für die schnelle Hilfe,
die Kommas werden nun ausgegeben,
aber leider ist die erste Stelle nach dem Komma
immer 0, (was aber nicht immer stimmt).

Code: Alles auswählen

	snprintf(filebuffer, 500,"\n%d;%d;"
		 "%0.1f;%0.1f;%0.1f;%0.1f;%0.1f;"
		 "%0.1f;%0.1f;%0.1f;%0.1f;%0.1f;%0.1f;%0.1f;",

		 dat->tdj,stundevoranstieg,
		 dat->temp30,dat->feuchte30,dat->benetzung,dat->niederschlag,tempsumme,
		 F0,F1,F2,F3,F4,F5,F6);
Was ist daran falsch?!

Vielden Dank
Matthias

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 25.04.2006 11:12:55

vermutlich stimmen die übergebenen Datentypen nicht 100prozentig zur spezifizierten Formatangabe. Hier gibt es keine Typsicherheit

Antworten