frage zum switch-konstrukt
-
hallo,
wie kann ich innerhalb eines switch-konstrukt auf den fall reagieren, dass KEINE der cases eingetreten ist?z.B.
char key; swith(key){ case 'a' : machwas(); break; case 'b' : machwasanderes(); break; default : printf(">"); break; }
und ich will, dass wenn man jetzt etwas anderes als a oder b drückt,
eine meldung kommt "invalid command" oder so.ich dachte erst, dafür sei default da.
allerdings wird default ja IMMER ausgeführt, egal ob er zu einem case gematched hat oder nicht.zumindest in meinem beispiel oben.
also wie reagier ich auf den fall, dass er zu keinem case gematched hat?
danke
-
hdi schrieb:
hallo,
allerdings wird default ja IMMER ausgeführt, egal ob er zu einem case gematched hat oder nicht.zumindest in meinem beispiel oben.
Nö, dann machst du was falsch. Default wird verwendet, wenn kein passendes case gefunden wird.
-
Doch, dafür ist genau "default:" gedacht.
-
hm, also bei mir macht er es immer, habe es gerade noch mal getestet.
hier mal mein wirklicher code, irgendwas muss ja da falsch sein dann:
char pressedKey; while(pressedKey != 'q'){ scanf("%c",&pressedKey); switch(pressedKey){ case 'i': getInfo(); break; case 'c': doConnect(); break; case 'u': printCommandList(); break; default: printf("##### "); break; } } q_pressed();
meine ausgabe, wenn ich z.B. 'x' eingebe:
und meine ausgabe auf der konsole, wenn ich 'i' eingebe:
es greift also immer ? ich setze doch nach getInfo(); auch ein break;
dadurch dürfte er doch gar nicht nach default kommen, aber er tut es irgendwie.
-
Dann mach doch mal hinter scanf("%c",&pressedKey); ein printf("%d\n", pressedKey);. Dann wirst du sehen, dass du wahrscheinlich noch das \n Zeichen behandelst.
-
ohne das jetzt versucht zu haben, gebe ich dir recht.
das hab ich mich nämlich eh schon mal gefragt, wieso
scanf() standartmässig das "enter" nach dem eingeben auch als ein newline-commando umsetzt.wie kann ich das deaktivieren?
-
hinter scanf ein while(getchar() != '\n');
Zeh Mau - Realizing your dreams
-
aber getchar() != '\n' würde doch immer false geben,
weil er es ja eben einscannt.dann würde das alles ja nicht funktionieren.
-
sorry erstmal, ich war mal wieder ausgeloggt und kann nicht editieren.
also kann es sein, dass switch() einfach nicht das richtige für sowas ist?
dem user wird halt ein menü angezeigt, welche buchstaben er eingeben kann und was dann passiert.
aber so krieg ich es ja scheinbar nicht hin, dass er auf eine ungültige taste reagiert, weil ich einfach immer dieses "\n" drinnen hab, egal was eingegeben wird.
mit was kann man denn sowas evlt. besser realisieren?
ich könnte natürlich tausend if-else miteinander verschachteln, aber das is ja nich so elegant...
-
Du könntest auch einfach ein "case '\n': break;" einfügen
-
feigling schrieb:
Du könntest auch einfach ein "case '\n': break;" einfügen
das wird aber nix bringen
-
case '\n' ist doch das selbe wie default.
ich will aber, dass wikrlich NUR dann eine message (z.B. "invalid command) ausgeprinted wird, wenn man einen buchstaben eingetippt hat, der nicht in der liste vorkommt.
das geht aber nur, wenn ich der variablen, in die scanf() die eingabe speichert, irgendwie das '\n' entziehe, bevor ich das switch-konstrukt damit aufrufe.
-
Nein, die Schleife bis und einschließlich '\n'.
-
dot schrieb:
feigling schrieb:
Du könntest auch einfach ein "case '\n': break;" einfügen
das wird aber nix bringen
Weil?
-
weil ein break in einem switch nur aus dem switch rausgeht...
-
Ist ja auch richtig. Mehr soll ja auch garnicht passieren
Der soll ja nur das '\n' ignorieren.
-
hm ok. ich dachte du wolltest damit die schleife beenden. so wie ich das verstanden hab soll er aber alles bis auf die beiden cases ignorieren. damit sollte man eigentlich nix andres zu tun haben als im switch einfach nur die beiden cases anzugeben^^