- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: switch case, mit Strings

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    140

    switch case, mit Strings

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen.
    Möchte swich über einen String steuern.

    Der Klassiker;
    Code:
    int Auswahl=1;
    swich(Auswahl){
    case 1: /*macht was*/; break;
    Folgendes klappt leider nicht - komme nicht auf den Fehler.
    Code:
    char Auswahl[] = "Menue01";
    swich(Auswahl){
    case "Menue01": /*macht was*/; break;
    PS: ich habe weder <stdio.h> noch <string.h> eingebunden.
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    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 !

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    enum ist dein Freund!
    Code:
    enum menu_t { start, test, hilfe };
    
    menu_t auswahl = start;
    switch(auswahl) {
      case start: 
        start(); 
        break;
      case test:
     //...
    }

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    140
    Zitat Zitat von Sisor Beitrag anzeigen
    enum ist dein Freund!
    Danke für den Tipp! Besser als mit Zahlen zu hantieren.
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

  5. #5
    HaWe
    Gast
    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

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    140
    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 |

  7. #7
    HaWe
    Gast
    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

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Es ging frabe wohl eher um Bezeichner in Switch-Case-Konstrukten als tatsächlich um Strings.

  9. #9
    HaWe
    Gast
    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.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    140
    Code:
    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...
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

Ähnliche Themen

  1. [ERLEDIGT] if then oder switch/case bei Arduino bzw c, c++
    Von oderlachs im Forum Software, Algorithmen und KI
    Antworten: 5
    Letzter Beitrag: 18.07.2012, 16:47
  2. switch case aud union und struct gehen schief, hat einer eine Idee warum ???
    Von jdelphi im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 29.09.2011, 14:04
  3. switch-case-Abfrage beim Minitaschenrechner
    Von Enomis im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 10.08.2010, 11:51
  4. switch-Anweisung springt immer zum selben case X Befehl
    Von HF SHOOTER im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 05.11.2007, 20:06
  5. switch und case
    Von Spurius im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 26.10.2005, 17:42

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test