www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik printf Formatierungsfrage


Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich wünsche euch einen schönen Samstag vormittag.

Könnt ihr mir sagen, warum folgende Zeile

double d=5, e=8;


printf ("%f durch %f = %f",d,e,d/e  );

"   ? durch ? = ?   "      ausgibt ?

Wie bekomme ich denn die Fragezeichen weg?

Das war schon alles.

Ich danke Euch im Vorraus sehr für die Hilfe.

viele Grüße,

Matthias.

Autor: narf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf ("%4.2f durch %4.2f = %4.2f",d,e,d/e  );

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matze schrieb:
> Wie bekomme ich denn die Fragezeichen weg?

Indem du die libprintf_flt mitlinkst.

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für Deine Antwort.

doch es geht noch immer nicht.  Als Ausgabe gibt es nur ein 
Fragezeichen.

Der rechnet irgendwie nicht in dem Format.

Muss ich noch eine Library includen?

Grüße, MAtthias.

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matze schrieb:
> double d=5, e=8;

Und mit

double d=5.0, e=8.0;

?

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matze schrieb:
> Muss ich noch eine Library includen?

Woher sollen wir das wissen, wenn Du es nicht einmal für nötig 
befindest, auch nur die kleinste Andeutung hinsichtlich Deines 
Zielsystems und der Produktionsumgebung zu machen?

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, entschuldigung, dass ich hdas alles gart nicht mitgeteilt habe.
bin hier noch anfänger in dem Forum, deswegen.

STK 500 mit Atmega 8515 Chip

AVR Studio4.18

hier mal der ganze code, bin gespannt, woran der Fehler liegen soll



#include <avr/io.h>
#include <stdlib.h>
#include "string.h"


// #include <util/delay.h>    // wenn das aktiviert, dann sendet er gar 
nichts, wißt ihr warum? brauche ich doch  für delay funktionen, nicht 
wahr?

#ifndef F_CPU

#warning "F_CPU war noch nicht definiert, wird nun nachgeholt"


#define F_CPU 8000000UL

#endif



#define BAUD 4800UL      // Baudrate

// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = 
kein Fehler.


#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu 
hoch!
#endif



void uart_init(void)
{
  UCSRB |= (1<<TXEN);  // UART TX einschalten
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1

  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;
}




int uart_putchar(unsigned char c)        //diese Funktion bekommt ein 
einzelnes Zeichen zugeschickt und gibt dieses aus
{



    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
    {
    }

    UDR = c;                      /* sende Zeichen */
    return 0;
}





int main(void)
{




   uart_init();



fdevopen (uart_putchar, NULL,0);

  int a= 5,b =8;
  double i=5.0/8.0 ;






  printf ("%d x %d = %d",a,b,a*b  );
  printf ( "\r\n" );
  printf ("%d durch %d = %d",a,b,a/b  );
  printf ( "\r\n" );

  printf ("%d durch %d = %4.2f",a,b,i  );    //  funktioniert so noch 
nicht, nur Fragezeichen
  printf ( "\r\n" );





   while (1)
    {
      ;
   }

return 0;
}

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die libm muss auch noch mitgelinkt werden. Hab ich vorhin vergessen.
Schau mal hier:
http://winavr.scienceprog.com/avr-gcc-tutorial/usi...

Autor: eklige Tunke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur so ein paar allgemeine Tipps zum Posten in Foren:
Netiquette

Autor: besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
double-Variablen printfen mit %lf, nicht mit %f.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, das ist erstens Unsinn und tut hier zweitens nichts zur Sache.

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.