switch ( ausdruck) {Der Wert von ausdruck wird mit den Werten von konst_ausdruckj(j = 1, 2, ... ) verglichen. Bei Übereinstimmung wird die dazugehörige anweisungs_listej abgearbeitet.
case konst_ausdruck1 :anweisungs_liste1 ... case konst_ausdrucki :anweisungs_listei default:anweisungs_listed case konst_ausdrucki+1 :anweisungs_listei+1 ... case konst_ausdruckn :anweisungs_listen }
ACHTUNG! Nach Ausführung der anweisungs_listej eines case-Zweiges wird die switch-Anweisung nicht automatisch beendet, sondern anweisungs_listej+1 usw. ausgeführt. Dies kann aber mit Hilfe der break-Anweisung verhindert werden.
Der default-Zweig wird ausgeführt, wenn keine Übereinstimmung mit konst_ausdruckj (j = 1, ... n) festgestellt wurde.
Insbesondere können fehlen:
- der default-Zweig oder
- die case-Zweige vor dem default-Zweig oder
- die case-Zweige nach dem default-Zweig.
Aufgabe:
BEISPIELE/b241a.c: #include <stdio.h> #define YES 1 #define NO 0 main() /* Folgen von ' ' bzw. '\t' durch ' ' ersetzen */ { int c; int inleer; inleer = NO; while((c = getchar()) != EOF) switch(c) { case '\t': case ' ' : if(inleer == NO) { inleer = YES; putchar(' '); } break; /* unbedingter Abbruch der switch-Anweisung */ default: inleer = NO; putchar(c); break; } }
BEISPIELE/b241b.c: #include <stdio.h> main() /* einfacher Taschenrechner */ { double op1, op2; char op[2]; printf("Eingabe: zahl <op> zahl ENTER\n\n"); while(scanf("%lf %1s %lf", &op1, op, &op2) != EOF) { switch(op[0]) { case '+': op1 += op2; break; case '-': op1 -= op2; break; case '*': op1 *= op2; break; case '/': op1 /= op2; break; default: printf("illegal operator\n"); continue; } printf(" = %g\n", op1); } }
BEISPIELE/b241c.c: #include <stdio.h> main() /* switch-Anweisung */ { int i = 6; while (i--) switch(i){ case 0: printf("NULL "); case 1: printf("EINS "); break; case 3: printf("DREI "); break; case 5: printf("FUENF "); default: printf("%d ", i); } printf("\n"); }