Η δομή επιλογής switch
στη γλώσσα προγραμματισμού C επιτρέπει την εκτέλεση ενός από πολλά τμήματα κώδικα, ανάλογα με την τιμή μιας μεταβλητής ελέγχου. Αντί να χρησιμοποιείτε πολλαπλές δηλώσεις if..else
, μπορείτε να αντικαταστήσετε αυτήν τη λογική με την δομή switch
.
Η σύνταξη της δομής switch
είναι:
switch (expression) { case value1: // Κώδικας που θα εκτελεστεί αν η expression έχει την τιμή value1 break; case value2: // Κώδικας που θα εκτελεστεί αν η expression έχει την τιμή value2 break; case value3: // Κώδικας που θα εκτελεστεί αν η expression έχει την τιμή value3 break; default: // Κώδικας που θα εκτελεστεί αν η expression δεν έχει καμία από τις παραπάνω τιμές break; }
Οι τιμές value1
, value2
, value3
κ.λπ. είναι οι πιθανές τιμές που μπορεί να έχει η μεταβλητή expression
. Ο κώδικας που βρίσκεται μέσα σε κάθε case
θα εκτελεστεί μόνο αν η expression
έχει την αντίστοιχη τιμή. Αν η expression
δεν έχει καμία από τις παραπάνω τιμές, τότε εκτελείται ο κώδικας που βρίσκεται μέσα στο default
.
Η χρήση της δομής switch
μπορεί να καθιστά τον κώδικα πιο απλό και ευανάγνωστο, ειδικά όταν έχουμε πολλές πιθανές τιμές προς ελέγχο.
Το παρακάτω παράδειγμα χρησιμοποιεί τους αριθμούς των μηνών για να υπολογίσει το όνομα της ημέρας της εβδομάδας:
#include <stdio.h> int main() { int month = 4; char* weekday; switch(month) { case 1: weekday = "Sunday"; break; case 2: weekday = "Monday"; break; case 3: weekday = "Tuesday"; break; case 4: weekday = "Wednesday"; break; case 5: weekday = "Thursday"; break; case 6: weekday = "Friday"; break; case 7: weekday = "Saturday"; break; default: printf("Invalid month\n"); // Εκτυπώνει μήνυμα για μη έγκυρο μήνα return 1; } printf("The fourth month is %s\n", weekday); // Εκτυπώνει το όνομα της ημέρας για τον τέταρτο μήνα return 0; }
Ο κώδικας αυτός χρησιμοποιεί έναν διακόπτη (switch) για να αντιστοιχίσει έναν μήνα με την αντίστοιχη ημέρα της εβδομάδας. Η μεταβλητή month
παίρνει την τιμή 4, προσδιορίζοντας τον τέταρτο μήνα.
Ανάλογα με την τιμή της μεταβλητής month
, ο κώδικας εκχωρεί το κατάλληλο όνομα ημέρας στη μεταβλητή weekday
. Στη συγκεκριμένη περίπτωση, το weekday
θα πάρει την τιμή “Wednesday” καθώς ο τέταρτος μήνας αντιστοιχεί στην Τετάρτη.
Τέλος, ο κώδικας εκτυπώνει το όνομα της ημέρας για τον τέταρτο μήνα χρησιμοποιώντας την εντολή printf
. Αν η τιμή της μεταβλητής month
δεν αντιστοιχεί σε κανέναν έγκυρο μήνα, τότε εκτυπώνεται το μήνυμα “Invalid month” και το πρόγραμμα τερματίζει με επιστροφή τιμής 1.
Στη γλώσσα προγραμματισμού C, όταν η εκτέλεση του κώδικα φτάσει στη δήλωση break εντός ενός block switch, τότε διακόπτεται η εκτέλεση του block και συνεχίζεται με την επόμενη εντολή μετά το block switch.
Οι δηλώσεις break χρησιμοποιούνται συνήθως σε κάθε case block εντός της switch statement, όπως στο παράδειγμα που παρουσιάζεται παρακάτω:
switch (x) { case 1: // κάποιος κώδικας break; case 2: // κάποιος άλλος κώδικας break; default: // καμία από τις παραπάνω περιπτώσεις }
Όταν η εκτέλεση του κώδικα φτάσει σε μία από τις δηλώσεις break, τότε διακόπτεται η εκτέλεση του block και συνεχίζεται με την επόμενη εντολή μετά το block switch. Η χρήση της δήλωσης break εξασφαλίζει ότι δεν θα γίνει περαιτέρω εκτέλεση του κώδικα που βρίσκεται στα υπόλοιπα blocks εντός της switch statement και αυτό βοηθά στη βελτίωση της απόδοσης του κώδικα και στην παρακολούθηση του debugging.
Στη γλώσσα προγραμματισμού C, η δήλωση default στη switch statement ορίζει ένα block κώδικα που θα εκτελείται εάν δεν υπάρχει αντιστοιχία σε κάποιο από τα cases.
Αν υπάρχει αντιστοιχία σε κάποιο case, τότε το block κώδικα που ορίζεται στο αντίστοιχο case εκτελείται. Αν δεν υπάρχει αντιστοιχία με κάποιο case, τότε εκτελείται το block κώδικα που ορίζεται στο default.
Ένα παράδειγμα είναι το εξής:
#include <stdio.h> int main() { int day = 8; // Μεταβλητή που αντιστοιχεί στην ημέρα της εβδομάδας switch(day) { // Δομή επιλογής switch για τον έλεγχο της τιμής της μεταβλητής day case 1: // Αν η τιμή της μεταβλητής day είναι 1 printf("Monday\n"); // Εκτύπωση του μηνύματος "Monday" break; // Έξοδος από τη δομή switch case 2: // Αν η τιμή της μεταβλητής day είναι 2 printf("Tuesday\n"); // Εκτύπωση του μηνύματος "Tuesday" break; // Έξοδος από τη δομή switch case 3: // Αν η τιμή της μεταβλητής day είναι 3 printf("Wednesday\n"); // Εκτύπωση του μηνύματος "Wednesday" break; // Έξοδος από τη δομή switch case 4: // Αν η τιμή της μεταβλητής day είναι 4 printf("Thursday\n"); // Εκτύπωση του μηνύματος "Thursday" break; // Έξοδος από τη δομή switch case 5: // Αν η τιμή της μεταβλητής day είναι 5 printf("Friday\n"); // Εκτύπωση του μηνύματος "Friday" break; // Έξοδος από τη δομή switch default: // Αν η τιμή της μεταβλητής day δεν ταιριάζει με καμία από τις προηγούμενες περιπτώσεις printf("Weekend\n"); // Εκτύπωση του μηνύματος "Weekend" } return 0; // Επιστροφή της τιμής 0 για να υποδηλώσει την επιτυχή ολοκλήρωση του προγράμματος }
Ο παραπάνω κώδικας σε C ελέγχει την τιμή της μεταβλητής day
και εκτελεί διάφορες ενέργειες ανάλογα με την τιμή που έχει η μεταβλητή.
Ανάλυση του κώδικα:
- Η μεταβλητή
day
έχει τιμή 8. - Η δομή επιλογής
switch
ελέγχει την τιμή της μεταβλητήςday
. - Αν η τιμή της
day
είναι 1, εκτυπώνεται το μήνυμα “Monday”. - Αν η τιμή της
day
είναι 2, εκτυπώνεται το μήνυμα “Tuesday”. - Αν η τιμή της
day
είναι 3, εκτυπώνεται το μήνυμα “Wednesday”. - Αν η τιμή της
day
είναι 4, εκτυπώνεται το μήνυμα “Thursday”. - Αν η τιμή της
day
είναι 5, εκτυπώνεται το μήνυμα “Friday”. - Σε περίπτωση που η τιμή της
day
δεν ταιριάζει με καμία από τις προηγούμενες περιπτώσεις, εκτυπώνεται το μήνυμα “Weekend”. - Το πρόγραμμα ολοκληρώνεται με την επιστροφή της τιμής 0.
Έτσι, στην προκειμένη περίπτωση, καθώς η τιμή της μεταβλητής day
είναι 8 και δεν ταιριάζει με καμία από τις προηγούμενες περιπτώσεις, εκτυπώνεται το μήνυμα “Weekend”.