Switch erwartet ein int, oder ein Equivalent wie enum. Und der Vergleich entspricht einem "==". Beides funktioniert nicht mit einem Array. Falsche Sprache.
MfG Klebwax
Hallo zusammen.
Möchte swich über einen String steuern.
Der Klassiker;
Folgendes klappt leider nicht - komme nicht auf den Fehler.Code:int Auswahl=1; swich(Auswahl){ case 1: /*macht was*/; break;
PS: ich habe weder <stdio.h> noch <string.h> eingebunden.Code:char Auswahl[] = "Menue01"; swich(Auswahl){ case "Menue01": /*macht was*/; break;
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Switch erwartet ein int, oder ein Equivalent wie enum. Und der Vergleich entspricht einem "==". Beides funktioniert nicht mit einem Array. Falsche Sprache.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
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 20: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.
klappt super einfach!Code:enum{FadeIN, FadeOUT, Dimm}; //... if(ProzStart == ProzEnd) Auswahl = Dimm; if(ProzStart < ProzEnd) Auswahl = FadeIN; if(ProzStart > ProzEnd) Auswahl = FadeOUT; //... switch(Auswahl) { case FadeIN: //..
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...
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Lesezeichen