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


von Raphael R. (raphael)


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

von HenrikJ (Gast)


Lesenswert?

Floats sind nur %f.

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

von Raphael R. (raphael)


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!

von Karl heinz B. (kbucheg)


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.

von Raphael R. (raphael)


Lesenswert?

jetzt versteh ichs

danke!!!


Karl Heinz ist der BESTE!!!

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.