Hallo,
Ich bräuchte mal eure Hilfe:
In einem C-Programm möchte ich mit Werten mit Nachkommastellen (float) rechnen.
Das Ergebnis soll dann ein EUR-Betrag sein. Es soll also aus 44.6 schließlich ein String "44,60 EUR" werden.
Zu diesem Zweck habe ich eine Funktion geschrieben, die die Umwandlung der Zahl vornimmt.
Da Strings Arrays sind, und Funktionen keine ganzen Arrays zurückgeben können, wird stattdessen ein Zeiger auf das Array
zurückgegeben. Mit diesem Zeiger wird dann der String auf dem Bildschirm ausgegeben.
Leider gibt das Programm nicht wie erwartet "44,60" aus, sondern "8õÿ¿".
Sowas kommt ja häufiger vor.
Das Merkwürdige ist aber, wenn ich die Ausgabeanweisung einfach wiederhole, wird korrekt "44,60" ausgegeben.
Weiß jemand, wie das kommt ?
Hier mein Listing:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *z(float a);
main ()
{
float f=44.6;
/* Ruft Funktion z auf und übergibt f. Erhält Zeiger auf Stringarray zurück. Das Array wird ausgegeben: Ausgabe seltsamerweise "Xõÿ¿" */
printf("%s\n",z(f));
/* Dasselbe nochmal. Ausgabe nun korrekt "44,60". Warum das ? */
printf("%s\n",z(f));
}
char *z(float a)
{
char *x;
int i;
char b[20];
/* Schreibt übergebenen float a zweistellig nach String b */
sprintf(b,"%.2f",a);
/* Ersetzt . durch , */
for(i=0;i<strlen(b);i++)
{
if(b=='.') b=',';
}
x=b;
return x;
}
Übrigens: Wenn ich die main-Funktion stattdessen folgendermaßen fasse, erfolgt sogleich eine korrekte Ausgabe und ich kann mit d[] weiterarbeiten:
main ()
{
float f=44.6;
char d[20];
/* Ruft z auf und schreibt Zeigerarray nach d. */
sprintf(d,"%s",z(f));
printf("%s\n",d);
}
Ich wüßte aber trotzdem gern, was passiert war.
Beste Grüße
Ich bräuchte mal eure Hilfe:
In einem C-Programm möchte ich mit Werten mit Nachkommastellen (float) rechnen.
Das Ergebnis soll dann ein EUR-Betrag sein. Es soll also aus 44.6 schließlich ein String "44,60 EUR" werden.
Zu diesem Zweck habe ich eine Funktion geschrieben, die die Umwandlung der Zahl vornimmt.
Da Strings Arrays sind, und Funktionen keine ganzen Arrays zurückgeben können, wird stattdessen ein Zeiger auf das Array
zurückgegeben. Mit diesem Zeiger wird dann der String auf dem Bildschirm ausgegeben.
Leider gibt das Programm nicht wie erwartet "44,60" aus, sondern "8õÿ¿".
Sowas kommt ja häufiger vor.
Das Merkwürdige ist aber, wenn ich die Ausgabeanweisung einfach wiederhole, wird korrekt "44,60" ausgegeben.
Weiß jemand, wie das kommt ?
Hier mein Listing:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *z(float a);
main ()
{
float f=44.6;
/* Ruft Funktion z auf und übergibt f. Erhält Zeiger auf Stringarray zurück. Das Array wird ausgegeben: Ausgabe seltsamerweise "Xõÿ¿" */
printf("%s\n",z(f));
/* Dasselbe nochmal. Ausgabe nun korrekt "44,60". Warum das ? */
printf("%s\n",z(f));
}
char *z(float a)
{
char *x;
int i;
char b[20];
/* Schreibt übergebenen float a zweistellig nach String b */
sprintf(b,"%.2f",a);
/* Ersetzt . durch , */
for(i=0;i<strlen(b);i++)
{
if(b=='.') b=',';
}
x=b;
return x;
}
Übrigens: Wenn ich die main-Funktion stattdessen folgendermaßen fasse, erfolgt sogleich eine korrekte Ausgabe und ich kann mit d[] weiterarbeiten:
main ()
{
float f=44.6;
char d[20];
/* Ruft z auf und schreibt Zeigerarray nach d. */
sprintf(d,"%s",z(f));
printf("%s\n",d);
}
Ich wüßte aber trotzdem gern, was passiert war.
Beste Grüße