Go Down

Topic: switch case mit String Variablen (Read 186 times) previous topic - next topic

haiflosse

Hallo!
Ich möchte switch case mit String Variablen verwenden und habe dazu folgendes versucht:
Code: [Select]


String ton = "";

switch (ton) {
    case (ton == "c4"):
      buzzer.tone(261,1000);
      break;
   case (ton == "d4"):
      buzzer.tone(294,1000);
      break;
   default:
      delay(20);
  }



Leider bekomme ich aber beim Upload auf meinen mbot folgende Meldung:

-----------------
Loesung_Aufgabe1b_Ton:27: error: switch quantity not an integer

   switch (ton) {

              ^

Loesung_Aufgabe1b_Ton:28: error: call to non-constexpr function 'unsigned char String::operator==(const char*) const'

     case (ton == "c4"):

               ^

Loesung_Aufgabe1b_Ton:28: error: call to non-constexpr function 'unsigned char String::operator==(const char*) const'

Loesung_Aufgabe1b_Ton:31: error: call to non-constexpr function 'unsigned char String::operator==(const char*) const'

    case (ton == "d4"):

              ^

Loesung_Aufgabe1b_Ton:31: error: call to non-constexpr function 'unsigned char String::operator==(const char*) const'

exit status 1
switch quantity not an integer

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
------------------

Hoffe es kann mir jemand weiterhelfen, wie ich die switch und case korrekt verwenden kann.
If und else if funktioniert.

dsyleixa

#1
Apr 24, 2019, 10:08 am Last Edit: Apr 24, 2019, 10:24 am by dsyleixa
case verwendet in C immer Konstanten, es gehen weder variable Strings noch andere Variablen.
Das ist in C so definiert; im Prinzip werden die case-Statements wie Sprungadressen (labels) behandelt.

Quote
The constant-expression for a case must be the same data type as the variable in the switch, and it must be a constant or a literal
https://www.tutorialspoint.com/cplusplus/cpp_switch_statement.htm

Du kannst das Problem umgehen, indem du mehrere aneinandergehängte if() oder  if()...else if()  statements verwendest (wie du es ja schon gemacht hast).
Quote
Notice that switch is limited to compare its evaluated expression against labels that are constant expressions. It is not possible to use variables as labels or ranges, because they are not valid C++ constant expressions.

To check for ranges or values that are not constant, it is better to use concatenations of if and else if statements.
http://www.cplusplus.com/doc/tutorial/control/

Rentner

Hallo,

Syntax ist falsch

in der IDE Hilfe/ Referenz

Gruß Heinz


uwefed

Du kannst auch jedem Ton eine Nummer per #define zuordnen.
Dann funktioniert das wieder.
Code: [Select]
#define c4 20
...
switch (ton) {
    case c4:

Grüße Uwe

Serenifly

Quote
switch quantity not an integer
Das sagt dir genau was switch erwartet

Go Up