spinnt mein compiler oder ich!????

#432757
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
#432776
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!
#432785
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren