mikrocontroller.net

Forum: PC-Programmierung Simples Problem mit sprintf


Autor: Martin Michael (ats3788)
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kaj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Integer Division

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

Autor: korektore (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

char strBuff[30] = "";
int period = 218;
float f = 0;

f = 1000 / ( float *) period;
 
sprintf (strBuff  ," Hz: %.3f", (float *) f);
 


Autor: root (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum castest du nach float pointer? dasgleiche in sprintf?

Autor: root (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: root (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
korrektur, int variable ist initialisiert gewesen,

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.