You are not logged in.

  • Login
  • "myabba|abra" started this thread

Posts: 4,305

Location: Regensburg

Occupation: GER

  • Send private message

1

Wednesday, November 14th 2007, 6:44pm

C-Programmierung

Hi,
ich hab ne frage zu folgendem Code:

Quoted


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

This post has been edited 1 times, last edit by "myabba|abra" (Nov 14th 2007, 6:48pm)


2

Wednesday, November 14th 2007, 6:59pm

Quoted


#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:

Quoted


zahl eingeben!
3
stimmt!


Quoted


zahl eingeben!
2
falsch!


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

SenF_Bratak

Professional

Posts: 670

Occupation: GER

  • Send private message

3

Wednesday, November 14th 2007, 7:17pm

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

4

Wednesday, November 14th 2007, 7:22pm

Das Testen von Gleitkommazahlen auf Gleichheit bereitet öfters Probleme

  • "myabba|abra" started this thread

Posts: 4,305

Location: Regensburg

Occupation: GER

  • Send private message

5

Wednesday, November 14th 2007, 7:31pm

Quoted

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

Wednesday, November 14th 2007, 7:55pm

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.

This post has been edited 2 times, last edit by "pitt82" (Nov 14th 2007, 8:11pm)


  • "myabba|abra" started this thread

Posts: 4,305

Location: Regensburg

Occupation: GER

  • Send private message

7

Thursday, November 15th 2007, 2:36am

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 ...

This post has been edited 2 times, last edit by "myabba|abra" (Nov 15th 2007, 2:53am)


Posts: 2,153

Location: Freiberg

Occupation: GER

  • Send private message

8

Thursday, November 15th 2007, 12:15pm

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

fast_tam

Professional

Posts: 1,013

Location: Erding

Occupation: GER

  • Send private message

9

Saturday, November 17th 2007, 9:38pm

mit java wäre das nicht passiert :evil:

10

Saturday, November 17th 2007, 10:19pm

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