Sie sind nicht angemeldet.

  • Anmelden

myabba|abra

Erleuchteter

  • »myabba|abra« ist der Autor dieses Themas

Beiträge: 4 305

Wohnort: Regensburg

Beruf: GER

  • Nachricht senden

1

14.11.2007, 18:44

C-Programmierung

Hi,
ich hab ne frage zu folgendem Code:

Zitat


long double i;
printf("zahl eingeben! \n");
scanf("%Lf", &i);


if (i ==3 )
printf("stimmt!");
else
printf("falsch!");



wenn ich 3 eingebe, zeigt er mir falsch an
wenn ich aber vorher i=3 festlege (statt der user eingabe) passts
hat scanf einen kleineren erlaubten wertebereich als long double oder was ist da los ?

edit: wenn ich statt long double einfach double verwende gehts auch

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »myabba|abra« (14.11.2007, 18:48)


2

14.11.2007, 18:59

Zitat


#include <stdio.h>

int main()
{
long double i;
printf("zahl eingeben! \n");
scanf("%Lf", &i);


if (i ==3 )
printf("stimmt!");
else
printf("falsch!");

}


Gibt folgendes aus:

Zitat


zahl eingeben!
3
stimmt!


Zitat


zahl eingeben!
2
falsch!


Funzt bei mir (Ubuntu Gutsy, GCC 4.1.3) also.

3

14.11.2007, 19:17

Bei mir läufts ebenfalls, C++ 6.0
warum solltest du vorher i=3 festlegen ? oder war das nur zum testen O_o

4

14.11.2007, 19:22

Das Testen von Gleitkommazahlen auf Gleichheit bereitet öfters Probleme

myabba|abra

Erleuchteter

  • »myabba|abra« ist der Autor dieses Themas

Beiträge: 4 305

Wohnort: Regensburg

Beruf: GER

  • Nachricht senden

5

14.11.2007, 19:31

Zitat

Original von SenF_Bratak
Bei mir läufts ebenfalls, C++ 6.0
warum solltest du vorher i=3 festlegen ? oder war das nur zum testen O_o


natürlich ...

6

14.11.2007, 19:55

Gib das eingegebene i mal aus. Vielleicht ist das bei dir 3.000000123 o.ä.

Dann bindest du die stdlib.h mit ein (für abs) und machst die Abfrage so:

long double delta=10e-8;

if (abs(i-3)<delta)
...

Die Compiler arbeiten da wohl mit unterschiedlichen Genauigkeiten.

Edit: Alternativ könnte auch casten helfen .. also if((int)i==3) ...
Nochmal edit: Casten is vielleicht nich die cleverste Idee .. weil (int)2,999999=2 ist.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »pitt82« (14.11.2007, 20:11)


myabba|abra

Erleuchteter

  • »myabba|abra« ist der Autor dieses Themas

Beiträge: 4 305

Wohnort: Regensburg

Beruf: GER

  • Nachricht senden

7

15.11.2007, 02:36

grade nochmal bissl rumprobiert.
egal is was ich in die if-abfrage eingebe, es kommt IMMER falsch heraus

@pitt: ich schaus morgen nochmal genauer an... bin grad bissl bedient ...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »myabba|abra« (15.11.2007, 02:53)


8

15.11.2007, 12:15

das is ansich schon eine sehr schwammige abfrage

entweder du legst die variable als int an oder du verlangst vom nutzer eine gleitkommazahl , also 3.0


oder du baust einen cast ein wie pit gesagt hat

9

17.11.2007, 21:38

mit java wäre das nicht passiert :evil:

10

17.11.2007, 22:19

Eine double Variable, die i heisst...
Eine Benutzereingabe direkt in einen double...
Ein Vergleich eines doubles mit einem int...

Also sehr unsauber codiert und da braucht man sich auch nicht zu wundern wenn es nicht funktioniert.

ich würde die eingabe in einen string machen und dann z.B. mittels atoi() umwandeln