Frage von LordNxte, 30

Wie ändere ich die if Abfrage zu switch-case?

Hallo, ich soll folgenden Code ändern:

    printf("Vergleichsoperator:\n");
printf("-->");
scanf("%i", &wahl);

if (wahl == 1)                              // AND-Gatter 
{
    printf("A   B   Ergebnis\n");           // Logisches UND mit "&&"
    printf("________________________\n");
    printf("1   1   %i\n", 1 && 1);
    printf("1   0   %i\n", 1 && 0);
    printf("0   0   %i\n", 0 && 0);
    printf("0   1   %i\n", 0 && 1);
}
if (wahl == 2)                              // OR-Gatter
{
    printf("A   B   Ergebnis\n");           // Logisches OR mit "||"
    printf("________________________\n");
    printf("1   1   %i\n", 1 || 1);
    printf("1   0   %i\n", 1 || 0);
    printf("0   1   %i\n", 0 || 1);
    printf("0   0   %i\n", 0 || 0);
}

die if-Abfragen zu switch-case, danke

Antwort
von webflexer, 19

Ich würde das so machen:

switch (wahl) {
case 1:
printf("A B Ergebnis\n");
printf("________________________\n");
printf("1 1 %i\n", 1 && 1);
printf("1 0 %i\n", 1 && 0);
printf("0 0 %i\n", 0 && 0);
printf("0 1 %i\n", 0 && 1);
break;
case 2:
printf("A B Ergebnis\n");
printf("________________________\n");
printf("1 1 %i\n", 1 || 1);
printf("1 0 %i\n", 1 || 0);
printf("0 1 %i\n", 0 || 1);
printf("0 0 %i\n", 0 || 0);
break;
}
Kommentar von xGlumi ,

Erstmal haste meinen Upvote.

2. Würdest du es nicht "so machen", sondern man macht es so ^^
Wie willst du sonst einen 0815 Switch aufbauen :P

MFG xGlumi

Kommentar von PWolff ,

Mit dem beliebten "Antipattern"

switch (true) {
(wahl == 1):
// Anweisungen für Fall == 1
(wahl == 2):
// Anweisungen für Fall == 2
};

Das ist im wesentlichen dasselbe wie eine if ... else if ... -Kette.

Wolfram Research scheint dieses Pattern aber für so sinnvoll zu halten, dass es dafür extra "Which" eingeführt hat.

Antwort
von triopasi, 21

Erstens sollte das wohl ein if..else if oder if...else sein, kein if...if.

Zweitens: Scahu dir doch mal an wie Switch funktioniert, das ist sowas von trivial!!!

switch(variable)

{

Case 1:

Break;

...

}

Kommentar von LordNxte ,

Doch, das sollte ein if..if..if sein, das funktioniert auch so.

Danke

Kommentar von DreiGegengifts ,

Doch, das sollte ein if..if..if sein, das funktioniert auch so.

Kann ja sein, dass es funktioniert. Aber es ist ungut.  Mit 2 ifs müssen 2 Prüfungen gemacht werden, obwohl nur eine notwendig ist. Das kostet Rechenzeit und erhöht das Risiko für Fehler.

Kommentar von coding24 ,

Kann aber richtig sein. In dem Fall wäre (in meinen Augen) ein elseif die beste Lösung gewesen. If ... else ... fände ich jetzt nicht so sinnvoll - gib 'ne 3 ein und du landest im Zweig der 2. Da fand ich deinen Ansatz mit dem elseif besser.

Allgemein gesagt hast du mit deiner Performance-Aussage natürlich recht, das sollte man sich (in Meinen Augen) auch so angewöhnen.

Kommentar von NeoExacun ,

Es ist aber flexibler. Ein ordentlicher Compiler macht da sowieso das Gleiche draus.

Und natürlich ist es unschön, aus dem Gruind fragt er vermutlich auch nach Switch.

Kommentar von triopasi ,

Ganz eigentlich müsste man ja extra abfragen, ob was ungültiges eingegeben wurde, sprich if-elseif-else. Bei if-else passiert bei falscher Auswahl halt wenigstens etwas statt garnichts.. Kommt halt drauf an was man will. Fände pers. auch if-elseif am besten, oder der fall mit der Überprüfung der Eingabe.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten