www.mikrocontroller.net

Forum: PC-Programmierung spinnt mein compiler oder ich!????


Autor: Raphael Reu (raphael)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <stdio.h>
#include <stdlib.h>

int main(void)
{ double x=2.666666666666;
  float wertx;


  printf("eigentlich x=%lf\n",x);

  wertx=x;
  printf("wert von x = %f",wertx);

  getchar();
  return EXIT_SUCCESS;
}

bekomme folgende fehlermeldung

10 untitled1.c
 warning: use of `l' length character with `f' type character

das FORMATZEICHEN für double ist doch %lf, also warum hat mein compiler 
dann ein problem damit?

kann mir jemand helfen!???

1000d DANK

>Raphael

Autor: HenrikJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Floats sind nur %f.

Je nachdem ob und wieviel Kommastellen brqauchst, tut es %.1f

Autor: Raphael Reu (raphael)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es geht mir aber darum,
dass mein double wert siehe ->

double x=2.666666666666;
  float wertx;


  printf("eigentlich x=%lf\n",x);


NICHT RICHTIG AUSGEGEBEN WIRD, AUF GRUND DER FEHLERMELDUNG.

10 untitled1.c
 warning: use of `l' length character with `f' type character

%lf ist nicht %1f    (kleines L , nicht die zahl 1 !!!)

%lf gross geschrieben wäre %LF ... aber %Lf ist das formatzeichen für 
longdouble!

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Formatierzeichen für double ist bei printf %f
Das Formatierzeichen für float ist bei printf ebenfalls %f

Verwirrt?
Die Parameter-Übergaberegeln von C verlangen, dass floats
bei variadischen Funktionen als double übergeben wird. Als
Folge davon, kriegt printf nie einen float auch nur zu Gesicht,
immer nur double und daher kann für float und double dasselbe
Formatierzeichen, nämlich %f, benutzt werden.

Aber: Bei scanf ist das anders, denn dort wird ja ein Pointer
übergeben, und für scanf ist es schon wichtig zu wissen, ob
das jetzt ein Pointer auf einen double oder ein Pointer auf
einen float ist. Daher gibt es dort 2 Formatierzeichen:
%lf  für einen Pointer auf double
%f   für einen Pointer auf float

%lf ist also bei printf gar kein offizielles Formatierzeichen.
Aus Gründen der Symetrie haben aber einige Compilerbauer printf
zusätzlich noch mit einem %lf ausgestattet, damit eine gewisse
Angleichung mit scanf vorhanden ist (die eigentlich nicht
notwendig ist, wie oben schon geschildert). Dein Compiler
sieht das halt strikter.

Autor: Raphael Reu (raphael)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt versteh ichs

danke!!!


Karl Heinz ist der BESTE!!!

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.