sprintf problem
-
ahoi mädels
ich habe nen fettes prob, wobei ihr mir sicher helfen könnt
(extra das "zur hand gehen" verklemmt^^)ok. *scherz mal beiseite pack*
folgendes.. ich möchte einer funktion einen float wert übergeben und dazu wieviel vor- und nachkommestellen dargestellt werden sollen.
void FloatToStr(float fzahl, int prefix, int suffix) { char ausgabe[20]; sprintf(ausgabe,%f",fzahl); cout << ausgabe << endl; }
das wäre so erstmal wies laufen sollte, jetzt möchte ich aber das:
sprintf(ausgabe,%3.2f",fzahl);
sprintf(ausgabe,%1.3f",fzahl);
sprintf(ausgabe,%1.4f",fzahl);das möchte ich also per prefix und suffix steuern können.
ich peil nur nicht wie! kann mir einer da bitte mal behilflich sein?! danke
-
Hallo,
versuchs mal damit...
char ausgabe[20]; char format[10]; sprintf(format,"%%%d.%df",prefix,suffix); sprintf(ausgabe,format,fzahl); cout << ausgabe << endl;
Peter
-
Eine Möglichkeit wäre diese:
#include <stdio.h> #include <stdlib.h> #define MAX 5 int main() { char *ausgabe; ausgabe=malloc(MAX); float fzahl = 3.24353; snprintf(ausgabe,MAX, "%f",fzahl); printf("%s\n", ausgabe); }
Du benutzt snprintf und übergibst einfach die Anzahl entsprechenden Zeichen.
BTW: cout hat nix mit C zu tun!
-
Soviel ich weiß, geht das auch ganz einfach so:
void FloatToStr(float fzahl, int prefix, int suffix) { printf("%*.*f", prefix, suffix, fzahl); }
-
GEIL gleich 3 lösungen .. wobei die letzte ja wohl hammer ist.
von "*" wusste ich ja noch garnix da .. aber es geht *verdutzt guck*kannst mal erklären wieso? ich meine * hat ja keinen datentyp -.-
-
@ansimensch
Der Stern ist in dem Fall einfach nur ein Platzhalter. Fürs leichtere Verständnis kannst du dir ja vorstellen, dass der * als %d interpretiert wird innerhalb der Formatierungsangabe.
-
ansimensch schrieb:
kannst mal erklären wieso? ich meine * hat ja keinen datentyp -.-
If you write an asterisk (*) instead of a decimal number for a field width, then a print function takes the value of the next argument (which must be of type int) as the field width.
Dokumentationen sind schon was feines...