Formatierte Ausgabe von Zahlen
-
Gibt es eine einfache Möglichkeit in einer printf()-Ausgabe eine Zahl so zu formatieren, das anstatt der Ausgabe 1234567 1.234.567 ausgegeben wird ?
Eine Lösung mit einem Funktionsaufruf (siehe unten) finde ich ehr weniger praktisch:
#include <stdio.h> void Ausgabe(int x) { printf("%d",x/1000000); if (x>=1000000) printf("."); printf("%d",(x/1000)%1000); if (x>=1000) printf("."); printf("%d",x%1000); } int main() { int zahl=1234567; printf("Die Zahl lautet : "); Ausgabe(zahl); printf(" und ..."); getchar(); }
-
ich glaub das thema wurd schon mal diskutiere, und soweit ich mich erinnern kann, geht das nich!!!! bin mir aber nich sicher. Würde aber deine Ausgabe funktion mit ner schleife realisieren.
-
BorisDieKlinge schrieb:
ich glaub das thema wurd schon mal diskutiere, und soweit ich mich erinnern kann, geht das nich!!!! bin mir aber nich sicher. Würde aber deine Ausgabe funktion mit ner schleife realisieren.
Danke für die Antwort, auch wenn sie ja ehr weniger zufriedenstellend ist.
Meine Ausgabefunktion war jetzt nur eben so dahingeschrieben, um zu verdeutlichen, das ich es gerne anders machen würde. Aber du hast Recht, mit einer Schleife wäre sie schöner und vielseitiger.
-
Eigentlich sollte sowas gehen, durch Lokalisierung. Jedenfalls wird das Komma korrekt gesetzt. Allerdings sehe ich gerade im Manual von Linux-printf, dass der den Tausender-Trenner nicht berücksichtigt, es seidenn man verwendet das Format-Flag ' (Apostroph). Unter Linux produziert also folgendes die korrekte Ausgabe:
#include <locale.h> setlocale("de_DE"); // auf Windows German_Germany, oder aus Umgebung lesen printf("%'.2f", 1234.56); // ergibt 1.234,56
-
das ist doch pervers mit dem apostroff und so. ichi würd in ein char-array konvertieren und dann die punkte da einfügen.
Prost,
o.
-
oha! schrieb:
das ist doch pervers mit dem apostroff und so.
sieht auch ziemlich nach 'non-standard' aus.
-
Sorry, das wollte ich im obigen Beitrag noch deutlich gemacht haben: In eben dieser Manualpage steht auch, dass das ' (Apostroph) nicht zu ANSI C gehört.
-
Wenn, dann wollte ich schon mich auf ANSI-Standard beschränken.
Aber trotzdem danke.
-
umwandle die zahl in nen string gutti is und mach deine pünktchen rein
-
immer noch oha schrieb:
umwandle die zahl in nen string gutti is und mach deine pünktchen rein
Das bläht aber den Quellcode so auf und lenkt von den eigentlichen Aufgaben des Programmes ab, ich hatte davon "geträumt". das es so etwas wie z.B. bei der Festlegung von Nachkommastellen (%.2f) gibt. Oder eine andere kurze Lösung, die ich allgemeingültig in meine printf-Anweisung einsetzen kann.
Wie ich es aufgebläht hinbekomme, weiß ich ja (s.o.).
-
Korhil schrieb:
Das bläht aber den Quellcode so auf ....
ach, das ist doch nur eine kleine funktion:
void dotted_puts (char *s, int dots) { int n = 0; while (*s) { putchar (*s++); if (!(n = ++n % dots)) putchar ('.'); } } // test int main() { dotted_puts ("alle x zeichen ein puenktchen oder wie?", 3); }
-
~fricky schrieb:
Korhil schrieb:
Das bläht aber den Quellcode so auf ....
ach, das ist doch nur eine kleine funktion:
void dotted_puts (char *s, int dots) { int n = 0; while (*s) { putchar (*s++); if (!(n = ++n % dots)) putchar ('.'); } } // test int main() { dotted_puts ("alle x zeichen ein puenktchen oder wie?", 3); }
Das die Funktion klein ist, ist mir ja klar, aber wenn ich jetzt etwas die z.B. das hier öfter habe:
printf("Das Ergebnis lautet: %d, dafuer wurden %d Zuege gebraucht und eine Dauer von %d sek benoetigt.", ergebnis, zuege, dauer);
dann bläht sich der Code doch ganz schön auf, und das dann auch noch da, wo ich es nicht haben will, es sei denn, ich lagere auch das wieder aus (in eine Funktion Ausgabe).
-
Korhil schrieb:
printf("Das Ergebnis lautet: %d, dafuer wurden %d Zuege gebraucht und eine Dauer von %d sek benoetigt.", ergebnis, zuege, dauer);
du machst einfach strings draus. das hat übrigens schon jemand gesagt:
printf ("Das Ergebnis lautet: %s, dafuer wurden %s Zuege gebraucht und eine Dauer von %s sek benoetigt.", to_dotted_string (ergebnis), to_dotted_string (zuege), to_dotted_string (dauer));
-
~fricky schrieb:
Korhil schrieb:
printf("Das Ergebnis lautet: %d, dafuer wurden %d Zuege gebraucht und eine Dauer von %d sek benoetigt.", ergebnis, zuege, dauer);
du machst einfach strings draus. das hat übrigens schon jemand gesagt:
printf ("Das Ergebnis lautet: %s, dafuer wurden %s Zuege gebraucht und eine Dauer von %s sek benoetigt.", to_dotted_string (ergebnis), to_dotted_string (zuege), to_dotted_string (dauer));
Okay, ich geb mich geschlagen, wäre aber trotzdem schöner gewesen, wenn das standardmäßig bei ANSI-C dabei wäre.