Frage zur switch Anweisung



  • Hallo

    habe seit heute früh angefangen, mich mit der switch anweisung zu beschäftigen, da die if Anweisung für meinen fall nicht ausreicht

    mein problem ist, dass nicht nur für Fall 1, sondern auch für Fall 2 das Ergebnis von Fall 1 angezeigt wird.

    woran kann das liegen?

    #include <cstdlib>
    #include <iostream>
    using namespace std;

    int main(int argc, char *argv[])
    {
    char Auswahl;

    cout << "Druecken Sie 1 fuer rot oder 2 fuer blau " << endl;
    cin >> Auswahl;
    switch(Auswahl)
    { case (1):
    cout <<"Farbe ist rot ";
    break;
    default:
    cout<<"Farbe ist blau";
    break;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    Habe auch schon hier http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/c++_switch_de geschaut

    Sollte ich denn statt "default" lieber "case 2" nehmen? muss das dann nicht oben definiert werden, wass case 2 ist?



  • Fehler in Zeile 6, da ist ein Komma zuviel...

    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	char d, e,; // hier komma zuviel, achja und 2 Variablen zuviel
    	char i; // echt char??
    	cout << "Druecken Sie 1 fuer rot oder 2 fuer blau " << endl;
    	cin >> i;
    	switch(i)
    	{
    	case (1):
    		cout <<"Farbe ist rot ";
    		break;
    	default:
    		cout<<"Farbe ist blau";
    		break;
    	}
    	system("PAUSE"); // böse, weil langsam, unsicher und nicht plattformunabhängig
    	return EXIT_SUCCESS; // aus C oder so --> nimm mal eine aktuelle IDE statt DevC++ zu alt und so
    }
    

    Dir ist darüber hinaus bewusst, was passiert wenn du einen char per cin einliest?
    Gibst du die '1' ein, dann kriegt der nicht die Zahl 1 sodnern das Zeichen (mit dem Ascii Code 49).

    Deine Fehlerbeschreibung wundert mich daher ein bisschen: Denn umgekehrt macht es eher Sinn --> Gibst du die 1 ein kommt der Fall von 2, anstatt von 1.

    Und ehrlich gesagt, weiss ich nichtmal wie man das Zeichen eingibt, das den Ascii Code 1 hat... oO

    Edit: if ist mächtiger als Switch, denn if kann auch Fliesskommazahlen 😉
    Switch ist nur ein bisschen schneller 😉


  • Mod

    Da sollte niemals rot rauskommen, sondern immer blau, also der default -Fall. Da der Code an sich nicht compilierbar ist, nehme ich mal an, dass du uns nicht den richtigen Code zeigst, sondern nur etwas, was so ähnlich aussieht wie der fehlerhafte Code. Lies daher bitte den dritten Link in meiner Signatur durch.

    Ein möglicher Fehler ist hier: 1 != '1' != "1" .

    • 1 ist die Zahl Eins. Die Anzahl der Striche: |
    • '1' ist das Zeichen für die Ziffer Eins. Eine Linie von oben nach unten, in Deutschland noch mit einer Serife an der linken oberen Ecke versehen. Im Computer ist ein Zeichen auch eine Zahl, aber der Wert des Zeichens '1' ist in der Regel nicht 1.
    • "1" ist eine Zeichenkette bestehend aus der Ziffer '1' und einem abschließendem Nullzeichen.

    Da i bei dir vom Typ char ist, hast du die ersten beiden Fälle vermischt - mit unerwarteten Ergebnissen.



  • Hi,

    leider muss ich DevC++ von meiner Hochschule aus nehmen 😞



  • Der DEV C++ ist in diesem Fall kein Problem, sondern der Quelltext 😃

    Also ran an den Quelltext 👍



  • Kannst deinen Hochschule DEV, wenn Version 4.9.9.2 oder älter, mal testen:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        char taste;	// ältere Compiler akzeptieren 257 Zeichen??
    
        do
        {
            cout << "Druecken Sie 1 fuer rot oder 2 fuer blau und q fuer beenden: " << endl;
            cin >> taste;
    
            switch(taste)
            {
                case '1':
                    cout << "\n Farbe ist rot \n";
                break;
                case '2':
                    cout << "\n Farbe ist blau \n";
                break;
                case 'q':
                case 'Q':
                    cout << "\n Ob ihr dies noch seht? \n";	// wenn nicht aus Konsole gestartet
                    taste = 'q';						// egal ob Q oder q => q
                break;
                default:
                    cout << "\n bin noch nicht so weit \n";	// Text anpassen
            }
        } while(taste != 'q');
    }
    

    Alles was der alte DEV euch an Quelltext vorschlägt mit dem hier Gezeigten überschreiben. Und testen.

    Dies ist nur eine von mehreren Varianten. Da wurde hier ja schon drauf hingewiesen.

    Versuche dich auch an folgender alternativen Variante:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int taste;
        char marke = 'z';	// es gibt auch andere wege
    
        do
        {
            cout << "Druecken Sie 1 fuer rot oder 2 fuer blau und 0 fuer beenden: " << endl;
            cin >> taste;
    
            switch(taste)
            {
                case 1:
    // hier ist natürlich noch etwas zu ergänzen. Schaut in eure Unterlagen.
    

    Und wie Sepp schon schrieb, wenn ihr wissen wollt was Ärger macht, beide Varianten mischen 😃


Log in to reply