Seite 1 von 1

switch case / groß- kleinbuchstaben behandeln

Verfasst: 10.10.2011, 09:22
von IlikeMyLife
Hallo,

ich stehe derzeit vor einem kleinen problem mit der "switch case" anweisung. dazu ein kleines Beispiel:

Code: Alles auswählen

#include <iostream>

using namespace std;

// Hauptprogramm
int main()
{
 char chAuswahl;

 cout << "Auswahl angeben: ";
 cin >> chAuswahl;

 switch(chAuswahl)
 {
 case('a'):
  {// Todo} break;

 case('b'):
  {// ToDo} break;

 default:
  {// ToDo}
 }
}
Nun meine Frage. Wie lassen sich nun einfach Groß- und Kleinbuchstaben behandeln.
( ein kleines a soll das gleiche bezwecken wie ein großes A )
Mit dem || ( ODER-Operator ) wie ich typischerweise bei if-Abfragen verwende funktioniert es leider nicht...
Bin ich tatsächlich gezwungen dies wie folgt zu handhaben:

Code: Alles auswählen

 case('a'):
 case('A'):
  {// Todo} break;

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 10.10.2011, 09:52
von Schrompf
oder mit

Code: Alles auswählen

switch( tolower( chAuswahl) ) { ... }

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 10.10.2011, 11:03
von IlikeMyLife
EDIT:
musste zwar ein wenig suchen, bis ich fest gestellt habe, wie der befehl includiert wird, aber mit

#include ctype.h


funktioniert.
vielen dank. danach habe ich gesucht.

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 10.10.2011, 16:10
von Aramis
Davon abgesehen brauchst du keine Klammern im case-Ausdruck, case 'a' reicht vollkommen aus.

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 11.10.2011, 08:36
von IlikeMyLife
ist angewohnheit mittlerweile :-)
ich kann das auch nicht haben, wenn ein codeblock bei einer if-abfrage nur eine zeile lang ist und keine { } vorhanden sind.

EDIT:
Auch noch gefunden...

wenn in den case blöcken kleine buchstaben ( a, b, c ) stehen und großbuchstaben eingegeben werden

Code: Alles auswählen

switch ( tolower ( chAuswahl ))
wenn in den case blöcken große buchstaben ( A, B, C ) stehen und kleinbuchstaben eingegeben werden

Code: Alles auswählen

switch ( toupper ( chAuswahl ))
vielleicht braucht es ja noch einer ;-)

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 11.10.2011, 10:42
von kaiserludi
IlikeMyLife hat geschrieben:ist angewohnheit mittlerweile :-)
ich kann das auch nicht haben, wenn ein codeblock bei einer if-abfrage nur eine zeile lang ist und keine { } vorhanden sind.
Ich kanns nicht haben, wenn bei nur einer Zeiele {} vorhanden sind oder wenn andauernd überall überflüssige () auftauchen. Das macht den Code so unübersichtlich :D
Da hat wohl jeder so seine Vorlieben.

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 11.10.2011, 11:04
von DomiOh
kaiserludi hat geschrieben:
IlikeMyLife hat geschrieben:ist angewohnheit mittlerweile :-)
ich kann das auch nicht haben, wenn ein codeblock bei einer if-abfrage nur eine zeile lang ist und keine { } vorhanden sind.
Ich kanns nicht haben, wenn bei nur einer Zeiele {} vorhanden sind oder wenn andauernd überall überflüssige () auftauchen. Das macht den Code so unübersichtlich :D
Da hat wohl jeder so seine Vorlieben.
Sehe ich auch so.
Nur was ich dann wieder nicht haben kann ist sowas:

Code: Alles auswählen

while(...)
 for (...)
  for (...)
   if (...)
    if (...)
    else
   else
und das alles als Einzeiler OHNE Klammern

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 12.10.2011, 09:05
von IlikeMyLife
DomiOh hat geschrieben:

Code: Alles auswählen

while(...)
 for (...)
  for (...)
   if (...)
    if (...)
    else
   else
und das alles als Einzeiler OHNE Klammern
da würde ich nicht mal mit passender kommentierung durchblicken und würde von hand den quellcode erst einmal umschreiben

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 12.10.2011, 09:45
von kaiserludi
Muss nur vernünftig formatiert sein, schon steigt man wieder durch:

Code: Alles auswählen

while(...)
    for(...)
        for(...)
            if(...)
                if(...)
                else
            else
Mit 1-Space Tabs verliert man doch bei jedem Code die Übersicht ;)
Sobald ein if-else-Konstrukt innerhalb einer Schleife ist, bekommt die Schleife aber bei mir {}, auch wenn es ohne ginge, einfach weil ihr Rumpf dann eben rein optisch mehrere Zeilen auf der selben Einrückungs-Ebene umfasst.
und ineinander verschachtelte if-else bedeuten auch, bis auf die innerste Ebene gibts {}, sonst passiert nämlich ganz schnell mal sowas:

Code: Alles auswählen

if(...)
    if(...)
else
Für den Leser scheint das else zum ersten if zu gehören, syntaktisch gehört es aber zum zweiten.

Bei mir sähe der Code also so aus:

Code: Alles auswählen

while(...)
{
    for(...)
    {
        for(...)
        {
            if(...)
            {
                if(...)
                    /* one-liner */;
                else
                    /* one-liner */;
            }
            else
                /* one-liner */;
        }
    }
}
Bei sowas spar ich mir aber durchaus die Klammern:

Code: Alles auswählen

while(...)
    for(...)
        for(...)
            if(...)
                if(...)
                    /* one-liner */ ;
Das ist einfach übersichtlicher, als wenn man nur wegen der ganzen Klammern in solchem Code die Funktion mal eben vertikal doppelt so viel Platz im Code einnimmt.

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 12.10.2011, 09:57
von IlikeMyLife
ich denke mal, ich werde es später mal am eigenen leib feststellen müssen. meine derzeitigen quelltexte pro datei gehen noch nicht über etwa 500 zeilen hinaus. in größeren projekten, in denen eine datei um die 1k - 2k aufwärts geht, wird man das schon merken, was die übersichtlichkeit betrifft

Re: switch case / groß- kleinbuchstaben behandeln

Verfasst: 12.10.2011, 09:59
von Jonathan
Allerdings kann man sich bei so Konstrukten schon langsam fragen, ob man nicht einen Teil davon in Funktionen auslagert. Oder mehrere Bedingungen zu einer Abfrage zusammenfasst.
Und naja, Quelldateien die mehrere tausend Zeilen haben kann man ja evtl. auch ein wenig unterteilen, der Übersicht zur Liebe.