float zahl in deutsche schreibweise



  • hy.
    also ich poste hier einfach mal die aufgabe vorerst, die ich zu bewältigen habe:

    Eine einfache Methode, um eine Floatzahl in deutscher Schreibweise (Komma
    anstatt Dezimalpunkt) auszugeben, besteht darin, die Zahl zunächst mit sprintf() in
    einen Puffer zu schreiben, dort einen eventuell vorhandenen Punkt durch ein Komma
    zu ersetzen und dann diesen Puffer auszugeben.
    Entsprechend ist es sinnvoll, bei der Eingabe einer Zahl diese zunächst als String
    einzulesen, ein eventuell enthaltenes Komma in einen Punkt umzuwandeln und dann
    den String in eine Zahl zu konvertieren, z.B. mit sscanf().
    Schreiben und testen Sie einen Modul GerIO mit folgenden Funktionen:
    􀂃 int writeg(const char *formatstring, double zahl); druckt die Zahl mit sprintf() in
    einen Puffer, konvertiert Dezimalpunkt in Komma und gibt dann den Puffer aus.
    􀂃 int scang(const char *formatstring, double *pzahl); liest die Eingabe als String in
    einen Puffer, konvertiert Komma in Dezimalpunkt und konvertiert dann den
    Pufferinhalt in die Zahl.
    Das Ergebnis ist das von printf() bzw. scanf().

    Es geht wie gesagt darum, eine float-Zahl einzulesen, und den Punkt gegen ein Komma auszutauschen. Mein Problem liegt prinzipiell bereits darin, dass ich die Funktionen sprintf(); nicht mal richtig verstehe. Ich finde leider auch keine Beispiele im Netz. Es steht jedesmal beim Beispiel "Siehe Funktion printf"
    aaaaaahja, super. Ich verstehe die Funktion printf, bringt mir aber leider reichlich wenig wenn ich jetzt eine "erweiterte" Funktion benutzen soll.

    Es gibt doch bestimmt schon einen Codeschnipsel, der genau das macht.

    Ich will ganz sicher nicht, dass hier jemand meine Hausaufgaben macht, aber ich beschäftige mich jetzt schon so lange damit und hab einfach eine Denkblockade. Würde mich freuen, wenn mir jemand weiterhelfen kann, damit ich mir den Code anschauen kann und versuchen kann, es mir begreiflich zu machen.

    Vielen Dank, und freundliche Grüße



  • #include <iostream>
    using namespace std;
    
    char* tausche(char* buf, char alt, char neu)
    {
    	int i;
    	for (i = 0; buf[i]; i++)
    		if (buf[i] == alt)
    			buf[i] =  neu;
    	return buf;
    }
    
    int main()
    {
    	char Puffer[]  = {"312.45334"};
    	cout << tausche(Puffer, '.', ',') << endl;
    
    }
    

    😉



  • danke für den post, aber da gibtz noch ein paar ungereihmtheiten 🙂
    also erstens muss ichs in c und nicht in c++ programmieren und wie gesagt, ich muss die aufgabenstellung beachten und eben die funktionen benutzen, die gefragt sind, wie eben das vsprintf 😕



  • ex.aveal schrieb:

    [...]muss ichs in c und nicht in c++ programmieren[...]

    Ersetz iostream durch stdlib.h und nutze printf statt cout.



  • Wenn er schon nach sprintf() fragt, meint er wohl eher das da:

    #include <stdio.h>
    
    char str[128];
    
    const char * convf(float _float){
    	unsigned char cnt;
    	sprintf(str,"%f",_float);
    	for(cnt=0;str[cnt]!='\0';++cnt)
    		if(str[cnt]=='.')
    			str[cnt]=',';
    	return str;
    }
    
    int main(void){
    	printf("%s\n",convf(12.5));
    	getchar();
    	return 0;
    }
    


  • OMG hoffentlich verrät euch euer Lehrer, dass man solche Aufgaben eigentlich mit sscanf_l und sprintf_l löst ind ihr es ausschließlich zu Übungszwecken anders macht.


Anmelden zum Antworten