width bei printf
-
Es gibt scheinbar bei der "precision" für die Ausgabe von Variablen keine Möglichkeit, eine Variable als width anzugeben. Anders wüsste ich mir aber nicht zu helfen, um zwei double-Variablen, die mal gleich lang und mal unterschiedlich lang sind, so auszugeben, dass die Kommas immer übereinander stehen.
Also so:
12345.67
891.231234.56
7891.23123.45
67.89Die untere Variable ist niemals größer als die obere.
Gibt es eine elegantere Möglichkeit, als die Breite der unteren Variable mittels verschachtelter Abfragen anzupassen?
-
Das ist gemeint. Ich dachte, die Nachricht wird in Courier New angezeigt
Hier noch mal:
Es gibt scheinbar bei der "precision" für die Ausgabe von Variablen keine Möglichkeit, eine Variable als width anzugeben. Anders wüsste ich mir aber nicht zu helfen, um zwei double-Variablen, die mal gleich lang und mal unterschiedlich lang sind, so auszugeben, dass die Kommas immer übereinander stehen.
Also so:
12345.67 891.23 1234.56 7891.23 123.45 67.89
Die untere Variable ist niemals größer als die obere.
Gibt es eine elegantere Möglichkeit, als die Breite der unteren Variable mittels verschachtelter Abfragen anzupassen?
-
vielleicht hilft das
http://home.fhtw-berlin.de/~junghans/cref/FUNCTIONS/format.html
-
Hä?
das macht er doch ganz von alleine...
Oder versteh ich dein Problem grad nicht??
-
Davon hilft mir leider nichts. Jedenfalls finde ich da nichts passendes.
-
Also bei mir klappt das. Wie hast du deine Schleife denn gemacht?
Also ich hab meine Bildschirmausgabe so geschrieben
printf(" %2d %9.2f %9.2f %9.2f \n", i, Zinsen, Tilg , Rest);
und bei mir macht er alle kommas untereinander...
Bzw. sieht meine Schleife so aus:
for(int i=1;i<13 && btr>=0;+i, num++) { Zinsen=btr*zin/100/n; Tilg=rat-Zinsen; Rest=btr-Tilg; printf(" %2d %9.2f %9.2f %9.2f \n", i, Zinsen, Tilg , Rest); btr=Rest; i+=1;
-
Es geht darum, zwei unterschiedliche Variablen, die auch unterschiedlich viele Zeichen lang sein können, so auszugeben, dass immer die Kommata untereinanderstehen. Ich muss noch dazusagen, dass die obere Variable linksbündig ausgegeben werden soll.
Wert 1 : 12345.67 Wert 2 : 891.23 Wert 1 : 1234.56 Wert 2 : 789.12 Wert 1 : 123.45 Wert 2 : 67.89
Mein Problem ist, dass vor der unteren Variable nicht immer gleich viele Leerzeichen stehen dürfen.
-
Es wird dir nichts anderes übrigbleiben als den format string dynamisch zu erzeugen.
so irgendwie#include <stdio.h> void mprint( float f, int w, int p ) { char fmt[20]; sprintf( fmt,"%%%d.%df\n", w,p); printf(fmt,f); } int main() { float f = 12345.12345; mprint( f, 8, 2 ); f = 45.12345; mprint( f, 8, 2 ); f = 1234.12345; mprint( f, 7, 2 ); f = 45.12345; mprint( f, 7, 2 ); }
Kurt
-
Aso hol dir die Länge der oberen Zahl (also das vorm Komma) und gib dann bei printf das entsprechende an ...
-
Es gibt den Modifizierer * für die Ausgabenbreite.
a = 12345.678; b = 123.45; printf("Wert 1 : "); anz = printf("%.2f\n", a); printf("Wert 2 : %*.2f", anz, b);
Hätte ich viel früher erfahren können...
Danke an euch!