enum ist dein Freund!
Code:enum menu_t { start, test, hilfe }; menu_t auswahl = start; switch(auswahl) { case start: start(); break; case test: //... }
enum ist dein Freund!
Code:enum menu_t { start, test, hilfe }; menu_t auswahl = start; switch(auswahl) { case start: start(); break; case test: //... }
case erwartet nicht nur Zahlen als Sprungmarken, sondern KONSTANTE INTEGER Zahlen: es können also nie Variablen dahinterstehen.
Wenn du Variablen einsetzen willst und dazu evtl sogar auch noch Strings, dann verwende doch einfach if... else if...
char* vergleichen geht mit
strcmp(char *str1, char *str2);
bei Gleichheit wird eine 0 zurückgeliefert (0 = kein Unterschied).
Dein Programm sähe dann so aus:
Code:char Auswahl[10]; strcpy(Auswahl, "Menue01"); if( strcmp(Auswahl, "Menue01")==0 ) // ** tu was 1 ** ; else if( strcmp(Auswahl, "Menue02")==0 ) // ** tu was 2 ** ; else if( strcmp(Auswahl, "Hilfe")==0 ) // ** tu was 3 ** ;
Geändert von HaWe (13.05.2020 um 19:07 Uhr) Grund: KONSTANTE INTEGER Zahlen
Ich mag die Tabellenübersicht mit swich case - finde ich leserlicher.
Bis dato kam der mit Variablen zurecht. Aber strings (enum) machts mir noch einfacher.
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
nein, case kommt NIE mit Variablen als Sprungmarken zurecht.
case kann nur Int-Konstanten verwenden, um diese dann mit Int-Variablen zu vergleichen, aber nicht selber Floats oder Strings oder Vergleichsoperatoren (<,=,>) oder Funktionswerte verwenden - und auch nicht, wenn sie selber Variablen sind.
enum sind auch keine Strings, sondern quasi Namen (Bezeichner) für Integerkonstanten
Es ging frabe wohl eher um Bezeichner in Switch-Case-Konstrukten als tatsächlich um Strings.
das war nicht so ganz klar, im TO Post wird ja auf char[] getestet.
Wenn also z.B. die Variablen, auf die geprüft wird, z.B.von Serial-Inputs (Tastatureingaben in der Serial-Konsole oder verschickte UART-Strings von anderen MCUs) oder aus SD-Text-Files oder von Websites stammen (GET/POST), dann wären es ja "echte Strings", auf die getestet werden müsste, und dann bräuchte man auch Strings als Sprungmarken - was aber ja nicht geht.
Lesezeichen