Größer als und kleiner als in der switch-Anweisung in C
Ich versuche, den code schreibt, hat eine Menge der Vergleich
Schreiben Sie ein Programm in “QUANT.C", die "quantifiziert" zahlen. Lesen Sie eine ganze Zahl "x" und testen Sie es, die Herstellung der folgende Ausgabe: x größer als oder gleich 1000 print "äußerst positiv" x von 999 bis 100 (100) print "sehr positiv" x zwischen 100 und 0 print "positiv" x genau 0 print "null" x zwischen 0 und -100 print "negative" x von -100 bis -999 (einschließlich -100) print "sehr negativ" x weniger als oder gleich -1000 print "äußerst negativ" Somit -10 drucken würde "negativ", -100 "sehr negativ" und 458 "sehr positiv".
dann habe ich versucht, es zu lösen, mit Schalter, aber es hat nicht funktioniert, muss ich haben, um es zu lösen verwenden if-Anweisung oder es gibt eine Methode, es zu lösen mit Schalter?
#include <stdio.h>
int main(void)
{
int a=0;
printf("please enter a number : \n");
scanf("%i",&a);
switch(a)
{
case (a>1000):
printf("hugely positive");
break;
case (a>=100 && a<999):
printf("very positive");
break;
case (a>=0 && a<100):
printf("positive");
break;
case 0:
printf("zero");
break;
case (a>-100 && a<0):
printf("negative");
break;
case (a<-100 && a>-999):
printf("very negative");
break;
case (a<=-1000):
printf("hugely negative");
break;
return 0;
}
switch
können nur exakte Vergleiche mit Konstante Integrale Werte. Du wirstif
undelse
.- definieren
didn't work
- Sieben kompilieren Fehler haben sollte, sagte Sie etwas (und 1 Warnung:
control reaches end of non-void function
). - In Ihrer Problemstellung es wird nicht erwähnt, nutzen nur switch case. if -, else-Weg zu gehen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keinen sauberen Weg, um dieses Problem zu lösen, mit Schalter, als Fälle müssen zu integralen Typen. Haben Sie einen Blick auf if-else if-else.
Ein-Schalter-weniger und if-else-weniger-Methode:
Die for-Schleife enthält keinen code (es ist nur eine leere Aussage
;
), aber es läuft immer noch über das array mit den Werten und beendet, wenn der eingegebene Werta
ist gleich oder größer als dievalue
element im array. An diesem Punkti
hält der index-Wert für diedescription
zu drucken.for
Schleife ist alles, was zählt -- einen debugger verwenden, oder gehen Sie durch es mit Stift und Papier. Gut, das, und ein konsistent der Umgang der Geschlechter Betreiber in Ihre Liste der Beschreibungen.description
für Werte kleiner als der minimale Wert, und das hinzufügen erfordert das hinzufügen einer Grenze-Wert für diesen wiederum. Vielleicht braucht esINT_MIN
statt, dass beliebige-999
. (Ähnlich sehe ich, to anatolyg Antwort mitINT_MAX
zu zwingen, eine Kappe auf das andere Ende.)Wenn Sie gcc verwenden, haben Sie "Glück", denn es unterstützt genau das, was Sie wollen, indem Sie eine Sprache Erweiterung:
Dies ist nicht standard, obwohl, und andere Compiler nicht verstehen, den code. Es wird oft erwähnt, dass Sie sollten schreiben Sie Ihre Programme nur mit den standard-Funktionen ("Portabilität").
So sollten Sie die "optimierte"
if-elseif-else
konstruieren:(a>1000)
wertet entweder 1 [wahr] oder 0 [false].kompilieren und bekomme die Fehlermeldung
bedeutet dies, müssen Sie eine
integer constant
Wert für diecase
labels.If-else if-else
Schleife sollte gut funktionieren für diesen Fall.Dazu kommt eventuell ein bisschen zu spät aber:
Wo die option () - Funktion ist einfach eine Funktion mit if else.
Es ermöglicht Ihnen, halten Sie das saubere Aussehen der Schalter und Logik-Teil ist anderswo.
Warum haben Sie eine Vorliebe zu wechseln?
Ich Frage deshalb, weil das klingt schrecklich wie ein "Hausaufgaben-Frage". Ein compiler sollte befassen sich mit if/else Konstrukt genauso effizient wie ein switch (auch wenn Sie nicht den Umgang mit ranges).
Schalter nicht umgehen kann, reicht, wie Sie gezeigt haben, aber Sie könnte einen Weg finden, gehören Schalter, die durch die Einordnung der Eingang der ersten (mit if/else), dann mit einer switch-Anweisung um die Ausgabe der Antwort.