kann jemand sagen was isch falsch gemacht habe bitte
-
habe ein program und mus statt( if else) (witch case )
une habe denn code geschrieben#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { unsigned short a,b; cout << "Erste Ziffer (1..3): "; cin >> a; cout << "Zweite Ziffer (1..3): "; cin >> b; switch (a,b){ case '1 ' :cout << "Elf" << (1==a && 1==b ? "" : "") <<"."; break; case '2':cout <<"Zwoelf" << (1==a && 2==b ? "" :"") << "."; break; case '3' : cout << "Dreizehn" << (1==a && 3==b ? "":"" ) <<"."; break; case '4' : cout << "Einundzwanzig" << (2==a && 1==b ? "":"" ) <<"."; break; case '5' :cout << "Zweiundzwanzig" << (2==a && 2==b ? "":"" ) <<"."; break; case '6': cout << "Dreiundzwanzig" << (2==a && 3==b ? "":"" ) <<"."; break; case '7' : cout << "Einunddreizig" << (3==a && 1==b ? "":"" ) <<"."; break; case '8' :cout << "Zweiunddreizig" << (3==a && 2==b ? "":"" ) <<"."; break; case '9' : cout << "Dreiundreizig" << (3==a && 3==b ? "":"" ) <<"."; break; case 'E' : cout << "Unzuleassige Eingabe," << (0 == a || 0 == b || a > 3 || b > 3) << "Program beendet:"; break; default : cout << "Unzulaessige Eingabe, " << "Programm beendet."; } /*if (0 == a || 0 == b || a > 3 || b > 3) cout << "Unzulaessige Eingabe, Programm beendet." << endl; else { if (1 == a) { if (1 == b) cout << "Elf"; if (2 == b) cout << "Zwoelf"; if (3 == b) cout << "Dreizehn"; } if (2 == a) { if (1 == b) cout << "Einundzwanzig"; if (2 == b) cout << "Zweiundzwanzig"; if (3 == b) cout << "Dreiundzwanzig"; } if (3 == a) { if (1 == b) cout << "Einunddreissig"; if (2 == b) cout << "Zweiunddreissig"; if (3 == b) cout << "Dreiunddreissig"; } }*/ cout << endl; system("PAUSE"); return EXIT_SUCCESS; }aber funktioniert nicht
kann jemand mir sagen wo mein fehler liegt
wäre sehr denkbar für jede antwort
mfg
toni
-
switch (a,b){tja, also das ist sinnfrei, denn switch wertet nur einen Ausdruck aus.
aber funktioniert nicht
Ungenügende Fehlerbeschreibung. WAS funktioniert nicht? WO ist der Fehler? WELCHE Zeile?
Lies das für's nächste mal: http://www.lugbz.org/documents/smart-questions_de.html
MfG
GPC
-
ich glaub switch(a,b) wertet nur a aus...
btw: wenn a nur von 1-3 geht, dann brauchst du doch kein
case '9'
außerdem meinst du bestimmt
case 9:
, denn '9' ist was anderes, da a ja aber schort ist, musst du case 9: schreiben
-
ich habe 9 case, weil 9 möglichkeiten gibt und ist nicht anderes eingefallen.
soll ich zwei switch schreiben oder was
kann jemand einbisschen orientieren
mfg
toni
-
toni. schrieb:
ich habe 9 case, weil 9 möglichkeiten gibt und ist nicht anderes eingefallen.
du hättest länger denken sollen...
soll ich zwei switch schreiben oder was
Nicht unbedingt, vernünftig formulierte if else Bedingungen würden's auch tun. Ich seh hier einfach keinen Platz für switch.
kann jemand einbisschen orientieren
Komm, hilf mir auf die Sprünge, was soll dieses Programm denn tun?
Ach ja, system("PAUSE") ist Mist, schau hier, wie's besser geht: http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html
MfG
GPC
-
jetz bei die case ohne ' ' funktioniert aber liest nur b.
die frage ist.
ich muss statt if else (die grün an der code steht ) den program mit
switch case schreiben und am ende muss die gleiche ergebnis haben,
umwandeln von if() switch()
else in case :mfg
toni
-
toni. schrieb:
ich muss statt if else (die grün an der code steht ) den program mit
switch case schreiben und am ende muss die gleiche ergebnis haben,Ok, schon klar. Die Sache ist nur die: Hier ist switch einfach fehl am Platz. Du könntest hingehen und in der switch auf a prüfen und dann in Hilfsfunktionen abspringen, ist aber äußerst unelegant:
#include <cstdlib> #include <iostream> using namespace std; void handleOne(unsigned short b) { switch (b) { case 1: cout<<"Elf\n"; break; case 2: cout<<"Zwoelf\n"; break; case 3: cout<<"Dreizehn\n"; break; default: abort(); }; } //usw. entsprechend handleTwo... int main(int argc, char **argv) { unsigned short a,b; cout << "Erste Ziffer (1..3): "; cin >> a; cout << "Zweite Ziffer (1..3): "; cin >> b; if (a < 1 || a > 3 || b < 1 || b > 3) { cerr<<"Fehlerhafte Eingabe.\n" return 1; } switch (a) { case 1: handleOne(b); break; case 2: handleTwo(b); break; case 3: handleThree(b); break; default: abort(); }; cout<<endl; cin.get(); return EXIT_SUCCESS; }Aber das ist echt scheiß - code. Bleib lieber bei if - else.
MfG
GPC
-
ich danke dir obwohl nich das was ich brauchte gefunden habe.
vielen dank für deine zeit und schnelle antwort
mfg
toni
-
Du könntest auch aus beiden Werten eine Kombination berechnen lassen:
switch(a+10*b) { case 11: cout << "Elf" break; case 12: cout <<"Zwoelf" break; case 13: cout << "Dreizehn" break; ... default: cout << "Unzulaessige Eingabe, Programm beendet."; }(btw, was sollen die Ausdrücke ala "(1==a && 1==b ? "" : "")" eigentlich bewirken?
-
Maxi schrieb:
ich glaub switch(a,b) wertet nur a aus...
Nein, b. Bei einem Ausdruck mit mehreren durch den Kommaoperator getrennten Operanden werden zwar alle Operanden abgearbeitet, das Ergebnis (für weitere Verknüpfungen oder Auswertungen) wird aber durch den letzten Operanden bestimmt.
Bsp:
int one() { cout << "one" << endl; return 1; } int two() { cout << "two" << endl; return 2; } //... int result = one(), two(); cout << result << endl;Es werden beide Funktionen aufgerufen, also "one" und "two" ausgegeben. Das Ergebnis des Ausdrucks auf der rechten Seite der Zuweisung liefert aber der letzte Operand. Die abschliessende Ausgabe ist demnach 2.