kurze frage: int nach float?

Ich habe nen scanf() auf floateingaben und möchte überprüfen, wann jemand eine bestimmte zahl eingibt. dadurch, dass ich scanf() mit einer float überprüfe kann man nicht mit "5" oder "2" abgleichen, da er ja intern irgendetwas wie 5.00000 abspeichert. Wie kann ich also mein abzugleichenden int wert nach float umwandeln damit wenn er 5 eingibt (PC liest es als 5.00000...) und ich ein float_von_int(5) als bedingung angebe ich abzweigen kann?
 
Indem du das int in ein float konvertierst. Typecasting nennt sich das Ganze.

Code:
int i;
float j;

...

j = (float)i;
i = (int)j;
 
Original von bitmuncher
Indem du das int in ein float konvertierst. Typecasting nennt sich das Ganze.

Code:
int i;
float j;

...

j = (float)i;
i = (int)j;

Hab mal alle Kombos ausprobiert. Passiert nichts.

Hier der Code:
Code:
float z;

while(scanf("%f",&z)!=0){...}

probiert hab ich dann
while(scanf("%f",&z)!=(float)0){...}
while( ((int)(scanf("%f",&z)) !=0){...}

oder

float null=0,z;
int null2=0;

null2=(float)null und umgekehrt und statt der !=0 dann !=null und null2 eingesetzt. 

Wie weiter?^^
 
Inwieweit das bei einer 0 anwendbar ist, weiß ich jetzt nicht, müßte ich auch erst die Referenz wälzen. Hab noch nie ein Typecasting für 0 benötigt. Ich würde mich in diesem Fall für die schnelle Lösung entscheiden und das Float in ein Array zerlegen und damit arbeiten. Mag nicht die beste Lösung sein, aber die, die mir spontan einfallen würde.

Code:
float mynumber=66.6; 
char i[sizeof(float)]; 

*(float*)i = mynumber;
 
also mein scanf gibt mir sowieso immer ein int zurück ;)
allerdings:
Quelle=http://www.rt.com/man/scanf.3.html
return the number of input items assigned, which can be fewer than provided for, or even zero, in the event of a matching failure.
Eine(scanf("%f",&z)!=0) sollte also nur erfüllt sein, wenn Du eine ungültige Eingabe machst ;)

Zu den Floats allgemein:
http://de.wikipedia.org/wiki/Gleitkommazahl#Eigenschaften_einer_Gleitkommaarithmetik
insbesondere bei Vergleichen sollte man sehr aufpassen, da eben die Darstellung der Zahlen nicht unbedingt für ein einfaches "==" geeignet ist.
 
also ich weiss ja nicht was du programmieren willst, aber scanf() ist sehr unsicher.
die sicherste möglichkeit ist immer noch alle zeichen einzeln einzulesen und auszuwerten.
 
Original von CDW
Quelle=http://www.rt.com/man/scanf.3.html
return the number of input items assigned, which can be fewer than provided for, or even zero, in the event of a matching failure.
Eine(scanf("%f",&z)!=0) sollte also nur erfüllt sein, wenn Du eine ungültige Eingabe machst ;)
Ich habs auch schon mit while(scanf("%f",&z)>0.01) probiert. Bei 0.004 geht er nicht raus genauso wenig wie bei 0.

edit: Du hast vollkommen recht, ich habe es jetzt erst verstanden. Die Bedingung ist falsch formuliert. Ich möchte in der Bedingung das "neue" z mit 0 vergleichen und nicht die interne rückgabe von scanf(); Wie kann ich das scanf() in der abfrage beibehalten und dennoch z vergleichen?
 
Original von Avenger
lösen könntest es z.b. mit
Code:
while(1)
{
scanf("%f",&z);
if( z == 0.) break;
...
}
So hätte man es auch lösen können, ich habs aber in ne funktion gepackt und die funktion abgefragt

Code:
 while((z=eingabe())!=0){
 
Zurück
Oben