- Η εντολή switch μας επιτρέπει να κατευθύνουμε τη ροή του
προγράμματος προς μια συγκεκριμένη σταθερή τιμή ανάλογα με την
τιμή μιας παράστασης.
- Συντάσσεται ως εξής:
switch (παράσταση) {
case σταθερή1:
εντολή1;
εντολή1α;
εντολή1β;
...
break;
case σταθερή2:
εντολή2;
...
break;
...
default:
εντολή ν;
break;
}
- Ανάλογα με το με ποια σταθερή ισούται η τιμή της παράστασης
εκτελείται η αντίστοιχη εντολή.
- Αν καμία από τις σταθερές δεν ταυτίζεται με την τιμή της παράστασης
τότε εκτελείται η εντολή που ακολουθεί την default (αν υπάρχει), αλλιώς
δεν εκτελείται καμία εντολή.
- Παράδειγμα (τυπώνει την είσοδο μετατρέποντας χαρακτήρες που παριστάνονται
με ακολουθίες διαφυγής στις αντίστοιχες ακολουθίες):
#include <stdio.h>
main()
{
int c;
while ((c = getchar()) != EOF)
switch (c) {
case '\n':
printf("\\n");
break;
case '\a':
printf("\\a");
break;
case '\t':
printf("\\t");
break;
default:
putchar(c);
}
}
Με είσοδο τον εαυτό του παράγει το παρακάτω αποτέλεσμα:
#include <stdio.h>\n\nmain()\n{\n\tint c;\n\n\twhile
((c = getchar()) != EOF)\n\t\tswitch (c) {\n\t\tcase
'\n':\n\t\t\tprintf("\\n");\n\t\t\tbreak;\n\t\tcase
'\a':\n\t\t\tprintf("\\a");\n\t\t\tbreak;\n\t\tcase
'\t':\n\t\t\tprintf("\\t");\n\t\t\tbreak;\n\t\tdefault:
\n\t\t\tputchar(c);\n\t\t}\n}\n
- Το break δηλώνει ότι ο έλεγχος του προγράμματος μετά την εντολή
συνεχίζει στο τέλος της switch.
Σε αντίθετη περίπτωση ο έλεγχος του προγράμματος συνεχίζει στην επόμενη
case.
Η ιδιότητα αυτή μας επιτρέπει να δηλώσουμε πολλαπλές τιμές.
- Το παρακάτω παράδειγμα μετατρέπει όλα τα πεζά φωνήεντα σε a
και σύμφωνα σε z
#include <stdio.h>
main()
{
int c;
while ((c = getchar()) != EOF)
switch (c) {
case 'a': case 'e': case 'i': case 'o':
case 'u': case 'y':
putchar('a');
break;
case 'b': case 'c': case 'd': case 'f':
case 'g': case 'h': case 'j': case 'k':
case 'l': case 'm': case 'n': case 'p':
case 'q': case 'r': case 's': case 't':
case 'v': case 'w': case 'x': case 'z':
putchar('z');
break;
default:
putchar(c);
}
}
Με είσοδο τον εαυτό του παράγει το παρακάτω αποτέλεσμα:
#azzzaza <zzzaa.z>
zaaz()
{
azz z;
zzaza ((z = zazzzaz()) != EOF)
zzazzz (z) {
zaza 'a': zaza 'a': zaza 'a': zaza 'a':
zaza 'a': zaza 'a':
zazzzaz('a');
zzaaz;
zaza 'z': zaza 'z': zaza 'z': zaza 'z':
zaza 'z': zaza 'z': zaza 'z': zaza 'z':
zaza 'z': zaza 'z': zaza 'z': zaza 'z':
zaza 'z': zaza 'z': zaza 'z': zaza 'z':
zaza 'z': zaza 'z': zaza 'z': zaza 'z':
zazzzaz('z');
zzaaz;
zazaazz:
zazzzaz(z);
}
}