switch nur mit integer?



  • Hallo,...

    habe folgendes Proglem:

    Mein Programm soll aus einer Konfigurationsdatei Schlüsselwörter zu bestimmten typen auslesen.
    Das Format in der Config-Datei sieht so aus:
    date:"Datum:"
    time:"Zeit:"
    temperature:"Temperatur:"
    alles bis zum Doppelpunkt wird in der Variable char typ[255]; gespeichert.
    Jetzt möchte ich mit switch folgende Fallunterscheidung machen:

    switch(typ)
    {
    case "date": anweisungen;
    case "time": anweisungen;
    case "temperature": anweisungen;
    default: anweisungen;
    }

    Beim kompilieren gibt er bei dieser Stelle Fehlermeldungen aus!
    Was ist daran falsch?

    Florian



  • Kannst nur ganzzahlige Ausdrücke "switchen". Musst if verwenden.



  • Ok, danke für die Antwort!

    Florian



  • ... jo und strcmp(), weil du ja nicht die pointer vergleichen willst, sondern den "inhalt" des speicherbereiches, auf den sie zeigen.



  • @Doc:
    Danke für die Ergänzung 🙂

    @Florian:
    Achte darauf, dass strcmp 0 zurück gibt, wenn die Strings gleich sind! Und nicht 1, wie man meistens denkt.



  • Original erstellt von <Florian>:
    **Hallo,...

    habe folgendes Proglem:

    Mein Programm soll aus einer Konfigurationsdatei Schlüsselwörter zu bestimmten typen auslesen.
    Das Format in der Config-Datei sieht so aus:
    date:"Datum:"
    time:"Zeit:"
    temperature:"Temperatur:"
    alles bis zum Doppelpunkt wird in der Variable char typ[255]; gespeichert.
    Jetzt möchte ich mit switch folgende Fallunterscheidung machen:

    switch(typ)
    {
    case "date": anweisungen;
    case "time": anweisungen;
    case "temperature": anweisungen;
    default: anweisungen;
    }

    Beim kompilieren gibt er bei dieser Stelle Fehlermeldungen aus!
    Was ist daran falsch?

    Florian**

    Oder DU machst es so:

    switch ( typ.substr(1,1) {     // == a i e 
            case 'a': Anweisung ; break;
            case 'i': Anweisung ; break;
            default : anweisung ;break  // das klappt aber nur, wenn keine weiteren Optionen 
         }
    

    Hanns
    ;



  • so gehts auch mit switch:

    enum values{date=0,time,temp,end);
    
    const cahr const  a[][]={"Date","Time","temp"};
    
    //...
    
    int getValue(char *d)
    {
       int i;
       for(i=0;i!=end;i++)
          if(strcmp(a[i],d)==0)
             return i;
    }
    
    //...
    
    switch(getValue(blah))
    {
       case date://...
       case time:
       case temp:
    }
    

    Find ich soo recht gut gelöst...

    [ Dieser Beitrag wurde am 13.10.2002 um 19:51 Uhr von xroads42 editiert. ]



  • Danke für die Antworten, ich habs jetzt schon zu der

    if(strcmp(typ,"date")==0)
    {
    ...
    }

    umgeschrieben, hat auch ganz gut geklappt!

    Florian


Anmelden zum Antworten