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...


Anmelden zum Antworten