Forum: PC-Programmierung Simples Problem mit sprintf


von Martin M. (ats3788)


Lesenswert?

Hallo eine simple Funktion
und ich habe keine Ahnung wo das Problem liegt

period = 218
  f = 1000 / period;

  sprintf (strBuff  ," Hz: %.3f", f);

sollte eigentlich Hz: 4,587 ausgeben
ich bekomme aber immer eine gerade Zahl wie Hz: 4.000

http://www.cplusplus.com/reference/cstdio/printf/

von Peter II (Gast)


Lesenswert?

Martin M. schrieb:
> period = 218
>   f = 1000 / period;

wenn du uns ein vollständiges Programm geigt hättest, könnte man besser 
helfen.

Vermutlich ist period ein int - damit wird das eine ganzzahlige 
Division.

von Kaj (Gast)


Lesenswert?

Integer Division

What is the behavior of integer division in C?
http://stackoverflow.com/questions/3602827/what-is-the-behavior-of-integer-division-in-c#3602857

von korektore (Gast)


Lesenswert?

Martin M. schrieb:
> Hallo eine simple Funktion
> und ich habe keine Ahnung wo das Problem liegt

>
> period = 218
>   f = 1000 / period;
>
>   sprintf (strBuff  ," Hz: %.3f", f);
>
> sollte eigentlich Hz: 4,587 ausgeben
> ich bekomme aber immer eine gerade Zahl wie Hz: 4.000
>
> http://www.cplusplus.com/reference/cstdio/printf/


Nein - du bekommst gar nichts angezeigt mit deinem Code

1. fehlt da der type von strBuff, f und bei dieser zeile auch was

> period = 218

richtig muss es lauten

period = 218 ;

2. period und f sind vermutlich ganze Zahlen?
wenn du ein float haben möchtest, so nennt man die Kommazahlen
musst du zumindest nach float casten

casten steht im Handbuch

ich bin ja nicht so:
du kannst das mal probieren:
1
char strBuff[30] = "";
2
int period = 218;
3
float f = 0;
4
5
f = 1000 / ( float *) period;
6
 
7
sprintf (strBuff  ," Hz: %.3f", (float *) f);

von root (Gast)


Lesenswert?

Warum castest du nach float pointer? dasgleiche in sprintf?

von root (Gast)


Lesenswert?

Das ist Rezept für sporadisches Bum-Bam. Das Bitmuster ist nämlich 
uninitialisiert
Das will man sicher nicht als Adresse verstanden wissen.

Ich kann euch wärmstens Python empfehlen.

von root (Gast)


Lesenswert?

korrektur, int variable ist initialisiert gewesen,

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.