IF und Else problem
-
Hi Leute, ich habe ein Problem. Das wird anhand des Codes (wenn man es so nennen kann^^) deutlich:
#include <cstdlib>
#include <iostream>
using namespace std;int main(int argc, char *argv[])
{
int Zahl1;
int Zahl2;
int Zahl3;
int Ergebnis;
int Resultat;
string Frage;
string Richtig;
string Falsch;Zahl1 = 5;
Zahl2 = 8;
Zahl3 = 19;
Resultat = 32;
Frage = "Wie lautet das Ergebnis";
Richtig = "Das stimmt";
Falsch = "Das stimmt leider nicht";cout << "" << Frage << endl;
cout << "" << Zahl1 << "+" << Zahl2 << "+" << "" << Zahl3 << endl;
cin >> Ergebnis;
cin.get();if (Ergebnis == Resultat)
{
cout << "" << Richtig;
}else (Ergebnis != Resultat) /*Wenn ich hier ein Semikolon setze, kann es kompiliert werden.
Die Funktion wird auch ausgeführt. Nur wenn das Ergebnis richtig ist, wird automatisch
der String "Falsch" mit ausgegeben. */{
cout << "" << Falsch <<;
}cin.get();
return 0;
}So, hoffentlich werde ich jetzt nicht wegen entwaige umständliche Wege fertig gemacht

Aber kann mir da jemand helfen? Ich wollte einen kleinen Taschenrechner coden. Leider ist mir bald klar geworden, dass ich es nichtmal mit nur einer addition auf die Reihe bekomme.
Ok, es hat schon einmal geklappt. Aber der COmpiler der will nichtmehr^^Thx im vorraus

-
1. Falsches Forum: C++ wäre besser.
2. Das if Statement sieht so aus:if (Ergebnis == Resultat) { // Ausgabe... } else { // Andere Ausgabe... }Im else- Fall ist implizit gegeben, dass es die negierte Kondition des if- Falls ist. Ist ev. kompliziert erklärt... jedefalls brauchts "else (Ergebnis != Resultat" nicht, sondern nur else.
Simon
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Außer du willst es extra nochmal überprüfen dann aber else if! Bei zu vielen
Überprüfungen ist dann aber switch wieder zu bevorzugen.
-
Einmal zu deiner Stelle:
if (Ergebnis == Resultat) { cout << "" << Richtig; } else (Ergebnis != Resultat) /*Wenn ich hier ein Semikolon setze, kann es kompiliert werden. Die Funktion wird auch ausgeführt. Nur wenn das Ergebnis richtig ist, wird automatisch der String "Falsch" mit ausgegeben. */ { cout << "" << Falsch <<; }=> Wenn du ein Semikolon da setzt, schließt du den Scope, den du durch das else öffnest direkt (es gilt für EINE Anweisung danach, solange du den Scope nicht mit Klammern öffnest).
if (Ergebnis != Resutat) int var = 10;var kann danach nicht mehr genutzt werden. Ein
if (Ergebnis != Resultat);macht also im Endeffekt garnicht, bisauf, dass die Anweisungen in der if-Abfrage ausgeführt werden, wobei die boolischen Gesetze zum tragen kommen (and bindet stärker als or usw.)
d.h. beibool foo() { return (std::cout << "Test" << std::endl); } if (foo() != false);wirst du die Ausgabe "Test" sehen.
Wenn du nun eine if-else-Konstruktion hast, dann sieht das so aus:
if (a == true) // ... else /* a != true */ // ...D.h. wenn a nicht gleich true ist, ist else ("an sonsten") a == false, da eine Bedingung nur richtig oder falsch sein kann. Wenn du nun z.B. aber gucken willst ob a == true ist, und wenn das nicht der fall ist gucken willst ob b denn == true ist und an sonsten einfach irgendwas anderes machen willst, nimmst du if-else if-else
if (a == true) // ... else if (b == true) // ... else // ......
Achja, einmal optimierterre Version
#include <iostream> int main() { const int a(5), b(8), c(19); std::cout << "Wie lautet das Ergebnis von folgender Gleichung?\n" << a << " + " << b << " + " << c << " = "; int user_result(0); std::cin >> user_result; std::cout << (user_result == (a + b + c) ? "Richtig!" : "Falsch!") << std::endl; std::cin.get(); }