cannot appear in a constant-expression



  • Ich habe eine switch schleife erstellt, in der 2 Werte verglichen werden sollen.

    char auswahl2;
                cin >> auswahl2;
                switch( auswahl2 ){
                system ("CLS");
        case ('a' && ca == 1):
             cin.sync();
             cout <<"Du gewinnst\n";
            system ("PAUSE");
            system("CLS");
            goto top;
            //break;
        case ('a' && ca == 2):
            cin.sync();
             cout <<"Du verlierst\n";
            system ("PAUSE");
            system("CLS");
            goto top;
            //break;
        case ('a' && ca == 3):
            cin.sync();
             cout <<"Unentschieden\n";
            system ("PAUSE");
            system("CLS");
            goto top;
            //break;
    

    Hierbei soll für den wert ca eine Zufallszahl zwischen 0 und 4 (also 1 2 oder 3) gewählt werden. und mit dem eingetippten wert 'a' verglichen werden soll.
    Es soll also festgestellt werden ob die Kombination so wie angezeigt besteht oder nicht. Die zufallszahl 'ca' habe ich durch die Funktion

    ca = (rand()%3)+1;
    

    festgelegt, nun wird mir aber beim Compiler der Fehler 'ca'cannot appear in a constant-expression angezeigt und ich weiß nicht woher dieser kommt. 😕



  • Die Syntax ist anders.

    switch (variable){
    case konstante1:
    break;
    case konstante2:
    break;
    default:
    break;
    }
    

    variable muss etwas sein, dass sich in ein int umwandeln lassen lässt und konstante1 muss eine compile-Zeit-Konstante int-Zahl sein.
    In deinem Fall steht in der Konstante ca, aber ca ist nicht konstant, deshalb meckert der Compiler.

    Btw. switch ist keine Schleife und goto ist böse und system auch.



  • @GuterKlingone
    Ja, es soll.
    So geht es nur einfach nicht.

    Irgendwas hinschreiben und hoffen dass es der Compiler dann schon richtig verstehen wird funktioniert selten.



  • hallo,

    Du kannst mit dem switch case nur Konstanten vergleichen. z.B. 1, 5 oder "o". Strings gehen übrigens auch nicht.

    mfg
    HarteWare
    Edit: Ich weiß nicht was mit mir los ist, aber ich habs wieder mal nicht gecheckt 👎
    (vielleicht mal zum Arzt? 😕 😞 )


Anmelden zum Antworten