Durchlauf mehrerer if-Abfragen vermeiden
-
Hallo Forengemeinde,
zunächst der obligatorische Hinweis, ich bin blutiger Anfänger und deshalb sehe ich nicht immer direkt für andere offensichtliche Fehler, ich bitte hiermit vorab um Entschuldigung.
Zu meinem Problem:
Ich habe hier einen ganzen Haufen if-Abfragen, die aufeinander folgen. Mein Problem ist nun, dass wenn ich eine Eingabe mache, die eigentlich nur eine Abfrage auslösen sollte, werden alle nacheinander ausgelöst. Das ganze sieht wie folgt aus:
int main (int argc, _TCHAR* argv[]) { string form_in; string form_out; string zahl_in; string zahl_out; cout << "ANWEISUNG: Bitte waehlen Sie das Format der einzugebenden Zahl:\n"; cout << "1)Dezimal 2)Binaer 3)Hexadezimal 4)BCD\n"; cin >> form_in; //Dezimal zu xyz if (form_in == "1") { cout << "Bitte Format der Ausgabe wählen.\n"; cout << "1)Dezimal 2)Binaer 3)Hexadezimal 4)BCD\n"; cin >> form_out; if (form_out == "1") { cout << "Unzulaessig.\n"; system("PAUSE"); } if (form_out == "2") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; cin >> zahl_in; zahl_out = dez2bi(zahl_in); cout << zahl_out; } if (form_out == "3") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; cin >> zahl_in; zahl_out = dez2hex(zahl_in); cout << zahl_out; } if (form_out == "4") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; cin >> zahl_in; zahl_out = dez2bcd(zahl_in); cout << zahl_out; } } //binaer zu xyz if (form_in == "2"); { cout << "Bitte Format der Ausgabe wählen.\n"; cout << "1)Dezimal 2)Binaer 3)Hexadezimal 4)BCD\n"; cin >> form_out; if (form_out == "1") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; cin >> zahl_in; zahl_out = bi2dez(zahl_in); cout << zahl_out; } if (form_out == "2") { cout << "Unzulaessig.\n"; system("PAUSE"); } if (form_out == "3") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; cin >> zahl_in; zahl_out = bi2dez(zahl_in); zahl_out = dez2hex(zahl_out); cout << zahl_out; } if (form_out == "4") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; cin >> zahl_in; zahl_out = bi2dez(zahl_in); zahl_out = dez2bcd(zahl_out); cout << zahl_out; } } //hexadezimal zu xzy if (form_in == "3"); { cout << "Bitte Format der Ausgabe wählen.\n"; cout << "1)Dezimal 2)Binaer 3)Hexadezimal 4)BCD\n"; cin >> form_out; if (form_out == "1") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; int ausnahme; cin >> ausnahme; zahl_out = toHex(ausnahme); cout << zahl_out; } if (form_out == "2") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; int ausnahme; cin >> ausnahme; zahl_out = toHex(ausnahme); zahl_out = dez2bi(zahl_out); cout << zahl_out; } if (form_out == "3") { cout << "Unzulaessig.\n"; system("PAUSE"); } if (form_out == "4") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; int ausnahme; cin >> ausnahme; zahl_out = toHex(ausnahme); zahl_out = dez2bcd(zahl_out); cout << zahl_out; } } // bcd zu xyz if (form_in == "4") { cout << "Bitte Format der Ausgabe wählen.\n"; cout << "1)Dezimal 2)Binaer 3)Hexadezimal 4)BCD\n"; cin >> form_out; if (form_out == "1") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; cin >> zahl_in; zahl_out = bcd2dez(zahl_in); cout << zahl_out; } if (form_out == "2") { cout << "Bitte geben Sie die gewuenschte zahl ein.\n"; cin >> zahl_in; zahl_out = bcd2dez(zahl_in); zahl_out = dez2bi(zahl_out); cout << zahl_out; } if (form_out == "3") { cin >> zahl_in; zahl_out = bcd2dez(zahl_in); int aus_bcd; aus_bcd = atoi(zahl_out.c_str()); //zahl_out = dez2hex(aus_bcd); /// asdasdasdasdadswichtig } if (form_out == "4") { cout << "Unzulaessig.\n"; system("PAUSE"); } } }Habt ihr vieleicht eine Idee, wie ich es unterbinden kann, dass wenn eine Bedingung erfüllt wird, nicht gleich auch alle anderen abfragen bedient werden?
Beste Dank im Voraus.
teilzeitcoder
P.S: Ich hatte schon gesucht und ausprobiert, auch eine if-else abfrage hatte ich probiert, aber diese scheint nicht mit mehr als 2 Bedingungen zurecht zu kommen.
-
if(...){ } else if(...){ } else if (...){ }
-
switch(...) { case 1: break; case 2: break; ... }Gewöhn dir bei solchen Sachen lieber direkt
switch-casean, das wird sonst nur unnötig unübersichtlich.
-
Danke für die schnellen Antworten

Das mit dem else if habe ich getestet, allerdings weißt mich mein Compiler darauf hin, dass ich "else" ohne dazugehöriges "if" benutze. Und wenn ich mit dem ersten if anfange und dann im Wechsel gehe, rutsche ich dennoch weiter durch.
-
teilzeitcoder schrieb:
Danke für die schnellen Antworten

Das mit dem else if habe ich getestet, allerdings weißt mich mein Compiler darauf hin, dass ich "else" ohne dazugehöriges "if" benutze. Und wenn ich mit dem ersten if anfange und dann im Wechsel gehe, rutsche ich dennoch weiter durch.
Selbstverständlich werden alle Tests bis zum ersten Treffer durchgeführt. Erst die folgenden Test werden übersprungen.
-
teilzeitcoder schrieb:
//binaer zu xyz if (form_in == "2"); ... //hexadezimal zu xzy if (form_in == "3");Die Semikolons sind falsch. Dann sollte auch
else iffunktionieren
gruß
stalker
-
Heißt es nicht Semikola oder Semikolone?
-
Kellerautomat schrieb:
Heißt es nicht Semikola oder Semikolone?
laut Duden: Semikolons oder Semikola