Präprozessor: Wechsel zwischen Ganz- und Kommazahl
-
Habe es jetzt mal probiert, aber habe den Fehler noch nicht gefunden
Mein Fehler war dass ich die Syntax von typedef (mal wieder) durcheinandergebracht habe.
Es ist
typedef %alt% %neu%
und nicht anders herum.
-
@CStoll:
Ach stimmt :D. Ich muss wohl mehr darauf achten, dass die Präprozessoranweisung VOR dem compilieren ausgeführt wird.
@Ethon: Ok habe noch nie mit typedef gearbeitet gehabt und deshalb die Syntax auch nicht gekannt.Ok habe jetzt die Fehler korrigiert und das Programm wird auch ausgeführt nur die Ergebnisse stimmen nicht
#include <iostream> using namespace std; #define USE_FLOAT #ifdef USE_FLOAT typedef float Numbertype; #else typedef int Numbertype; #endif int main() { Numbertype Ergebnis; int Rechenart; Numbertype Zahl1,Zahl2; cout << "Was wollen sie rechnen ? plus(1) ? mal(2) ? minus(3) ? oder geteilt(4) ?" <<endl; cin >>Rechenart; cout <<"Geben sie eine Zahl ein" << endl; cin >> Zahl1; cout <<"Geben sie noch eine Zahl ein" << endl; cin >> Zahl2; if (Rechenart = 1) {Ergebnis = Zahl1 + Zahl2; } if (Rechenart = 2) { Ergebnis = Zahl1 * Zahl2; } if (Rechenart = 3) { Ergebnis= Zahl1 - Zahl2; } else {Ergebnis= Zahl1 / Zahl2; } cout <<"Ergebnis:" << Ergebnis << endl; system("Pause"); }
Was habe ich noch falsch gemacht ?
-
Du hast den Vergleich (==) mit einer Zuweisung (=) verwechselt.
-
Rechenart wird doch immer mit den Zahlwerten verglichen, aber wenn ich da statt dem "=" ein "==" einsetze funktioniert es auch nicht
-
silent12 schrieb:
Rechenart wird doch immer mit den Zahlwerten verglichen, aber wenn ich da statt dem "=" ein "==" einsetze funktioniert es auch nicht
Sollte es aber...
-
Nein sollte es nicht.
Überleg dir folgendes:
Angenommen du möchtest multiplizieren, gibst also eine 2 ein.
Danach gibst du noch 2 Zahlen ein - soweit ist alles gut.Nun kommt der code mit den if-statements.
Erste Bedingung wird zu false ausgewertet.
Zweite Bedingung ist true (Rechenart == 2), also werden die beiden Zahlen multipliziert und das Ergebnis gespeichert.
Dritte Bedingung wieder false, aber es gibt hier einen else-Zweig, daher wird dieser durchlaufen.
Im Ergebnis steht nun also nicht mehr das Produkt, sondern der Quotient.Lösung?
Entweder switch-case (breaks nicht vergessen), oder else if!P.S.: Es ist ratsam, sich mit einem Debugger vertraut zu machen - so kannst du genau nachvollziehen, welcher Ast einer Verzweigung durchlaufen wird, welche Werte die Variablen haben etc.
-
inter2k3 schrieb:
Nein sollte es nicht.
Ach, das
else
habe ich übersehen.
-
OK, da haut noch etwas mit der Zugehörigkeit der if's und else's nicht so hin, wie es sein soll. Das else in Zeile 42 greift immer dann, wenn Rechenart ungleich 3 ist, deshalb überschreibst du dort die Ergebnisse einer Addition oder Subtraktion.
-
Ah danke für den Tipp mit dem "else if". So nun funktioniert es.
Danke an alle.
Grüße
silent12
-
Oder nur
if
s...