PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Konvertierungen in C funktionieren nicht


Gast
2009-01-29, 08:20:57
Folgender Code:


#include <stdio.h>

void main(void)
{ char ch1,ch2,ch3;
int in1,in2,in3;
float fl1,fl2,fl3;
ch1 = 'H';
ch2 = 300;
ch3 = 3.23e14;
printf("\n %c \n %c \n %c\n ", ch1,ch2,ch3);

in1 = 'H';
in2 = 300;
in3 = 3.23e14;
printf("\n %d \n %d \n %d\n ", in1,in2,in3);

fl1 = 'H';
fl2 = 300;
fl3 = 3.23e14;
printf("\n %f \n %f \n %f\n ", fl1,fl2,fl3);
}


Das Problem ist liegt nun bei der Ausgabe von float. fl1 ergibt noch 72.00000,
die restlichen 2 ergeben 0.000000.

Weiteres Problem gibt es mit diesem Code:


#include <stdio.h>

void main(void)
{ char ch1,ch2,ch3;
int in1,in2,in3;
float fl1,fl2 = 3.14,fl3;
ch1 = 'H';
ch2 = 300;
ch3 = 3.23e14;
printf("\n %c \n %c \n %c\n ", ch1,ch2,ch3);

in1 = 'H';
in2 = 300;
in3 = 3.23e14;
printf("\n %d \n %d \n %d\n ", in1,in2,in3);

fl1 = 'H';
// fl2 = 300;
fl3 = 3.14;
printf("\n %f \n %f \n %f\n ", fl1,fl2,fl3);
}


fl2 ist nun -0.00000000000000000000000000000000000000000000004950... und fl3 ist 0.00000000 obwohl ja beide den gleichen Wert haben, nur, dass fl2 bei der deklaration inititialisiert wurde und fl3 erst später im Programm. Woran könnte das liegen. Ein Compilerfehler? Wir verwenden das 68000 Visual Simulator.

Hab den ganzen Code auch in Visual Studio eingefügt und dort klappts ohne Probleme. Hat da jemand ne Idee?

MuLuNGuS
2009-01-29, 08:56:41
hmm, ist das jetzt ernst gemeint?

du mußt die funktionsweise der verschiedenen datentypen kennen/wissen/lernen, so jedenfalls funktioniert das nicht.

du kannst(solltest) einer char-variable halt nur eine "character-konstante" oder eben short/integer mit rücksicht auf den wertebereich(0-255) einer char-variable zuweisen.

zuweisung eines integer > 255 an eine char-variable -> datenverlust
zuweisung eines float an eine char-variable -> sowieso datenverlust der nachkommastelle.

das netz ist voller tutorials, macht keinen sinn hier mit grundlagen anzufangen.

Gast
2009-01-29, 09:03:48
Es ist schon klar, dass hier Datenverlust auftritt. Genau das soll ja dieses Programm zeigen ;) Nur tritt eben Datenverlust an Stellen auf, an denen keiner auftreten sollte

MuLuNGuS
2009-01-29, 09:08:49
aso, für schulung oder wie?(wüsste nicht warum man solche dinge sonst demonstriert?)

muß wohl an deinem compiler liegen, VS2008 zeigt hier auch ein normales verhalten bezüglich der floats.