Fehlersuche bei code mit switch



  • Hallo Leute, ich kann in meinem Programm einfach nicht den Fehler finden. Hätte einer von euch eine Idee?
    Zur Aufagbe: Es sollen nacheinander 2 Zahlen eingegeben werden (von 1-3) und die daraus kombinierte Zahl z.B. 22 soll dann bei der Ausgabe "Zweiundzwanzig" stehen.

    #include <iostream>
    using namespace std;
    
    int main() {
        unsigned short a,b;
        cout << "Erste Ziffer (1..3): ";
        cin >> a;
        cout << "Zweite Ziffer (1..3): ";
        cin >> b;
    
    switch (a) {
            case '1' :
                switch (b) {
                    case '1' :
                        cout << "Elf";
                    break;
                    case '2' :
                        cout << "Zwoelf";
                    break;
                    case '3' :
                        cout << "Dreizehn";
                    break;
                }
            break;
            case '2' :
                switch (b) {
                    case '1' :
                        cout << "Einundzwanzig";
                    break;
                    case '2' :
                        cout << "Zweiundzwanzig";
                    break;
                    case '3' :
                        cout << "Dreiundzwanzig";
                    break;
                }
            break;
            case '3' :
                switch (b) {
                    case '1' :
                        cout << "Einunddreissig";
                    break;
                    case '2' :
                        cout << "Zweiunddreissig";
                    break;
                    case '3' :
                        cout << "Dreiunddreissig";
                    break;
                }
            break;
    
            default: cout << "Unzulaessige Eingabe, Programm beendet";
            break;
        }
        cout << endl;
    
    return 0;
    }
    


  • #include <iostream>
    using namespace std;
    
    int main() {
        unsigned short a,b;  // und warum nimmst du dann weiter unten char statt short?
    


  • char a, b;
      cin >> a; cin >> b;
      string Einer[4] = { "", "Ein", "Zwei", "Drei" };
      string Zehner[4] = { "", "", "zwanzig", "dreissig" };
      string s;
      if (a == '1')
        switch(b)
        {
          case '1': s = "Elf"; break;
          case '2': s = "Zwoelf"; break;
          case '3': s = "Dreizehn"; break;
        }
      else
        s = Einer[b-'0'] + "und" + Zehner[a-'0'];
      cout << s << endl;
    


  • Im Prinzip ist dein Ansatz genau richtig so, dein einziger Fehler liegt bei case
    da vergleichst du nämlich Integer (1-3) mit chars ('1', '2', '3'), hier würde dann von int zu char implizit gecastet werden und das führt nicht zu dem Ergebnis, welches du haben willst.

    Alt

    switch (a) {
    	case '1':
    		switch (b) {
    		case '1':
    			cout << "Elf";
    			break;
    		case '2':
    			cout << "Zwoelf";
    			break;
    		case '3':
    			cout << "Dreizehn";
    			break;
    		}
    		break;
    

    Neu

    switch (a) {
    	case 1:
    		switch (b) {
    		case 1:
    			cout << "Elf";
    			break;
    		case 2:
    			cout << "Zwoelf";
    			break;
    		case 3:
    			cout << "Dreizehn";
    			break;
    		}
    		break;
    

Anmelden zum Antworten