Archiv verlassen und diese Seite im Standarddesign anzeigen : switch case, mit Strings
Hallo zusammen.
Möchte swich über einen String steuern.
Der Klassiker;
int Auswahl=1;
swich(Auswahl){
case 1: /*macht was*/; break;
Folgendes klappt leider nicht - komme nicht auf den Fehler.
char Auswahl[] = "Menue01";
swich(Auswahl){
case "Menue01": /*macht was*/; break;
PS: ich habe weder <stdio.h> noch <string.h> eingebunden.
Switch erwartet ein int, oder ein Equivalent wie enum. Und der Vergleich entspricht einem "==". Beides funktioniert nicht mit einem Array. Falsche Sprache.
MfG Klebwax
enum ist dein Freund!
enum menu_t { start, test, hilfe };
menu_t auswahl = start;
switch(auswahl) {
case start:
start();
break;
case test:
//...
}
enum ist dein Freund!
Danke für den Tipp! Besser als mit Zahlen zu hantieren.
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:
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 ** ;
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.
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.
enum{FadeIN, FadeOUT, Dimm};
//...
if(ProzStart == ProzEnd) Auswahl = Dimm;
if(ProzStart < ProzEnd) Auswahl = FadeIN;
if(ProzStart > ProzEnd) Auswahl = FadeOUT;
//...
switch(Auswahl) {
case FadeIN:
//..
klappt super einfach!
Ich verstehe euch bzgl. if else vs. swich case; swich case ist in seinem Vergleichsmöglichkeiten und Variablenverarbeitung wesentlich eingeschränkter.
Finde aber die "tabellen/blockartige" Ausprägung übersichtlicher - Geschmackssache...
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.