Η δομή επιλογής switch
στην γλώσσα C++ είναι μια δομή που επιτρέπει την εκτέλεση ενός συνόλου εντολών βάσει της τιμής μιας μεταβλητής ή εκφράσεως. Η σύνταξη της δομής switch
περιλαμβάνει έναν έλεγχο (switch
) ακολουθούμενο από μια σειρά περιπτώσεων (case
). Κάθε περίπτωση περιλαμβάνει μια τιμή ή μια εκφραστική σχέση που συγκρίνεται με την τιμή του ελέγχου. Όταν μια περίπτωση ταιριάζει με την τιμή του ελέγχου, οι σχετικές εντολές μέσα στην περίπτωση εκτελούνται. Αν δεν υπάρχει ταιριαστή περίπτωση, μπορεί να υπάρχει μια περίπτωση default
που περιέχει εντολές που θα εκτελεστούν όταν δεν ταιριάζει καμία άλλη περίπτωση.
Η δομή switch
είναι χρήσιμη όταν υπάρχει η ανάγκη να γίνει πολλαπλή επιλογή βάσει μιας τιμής, αντί να χρησιμοποιηθούν πολλαπλά if-else
statements. Η χρήση της δομής switch
μπορεί να καθιστά τον κώδικα πιο απλό και αποδοτικό.
Η δομή της εντολής switch στη γλώσσα C++ έχει την ακόλουθη σύνταξη:
switch (expression) { case constant1: // κώδικας που εκτελείται αν η έκφραση έχει την τιμή της σταθεράς constant1 break; case constant2: // κώδικας που εκτελείται αν η έκφραση έχει την τιμή της σταθεράς constant2 break; default: // κώδικας που εκτελείται αν η έκφραση δεν έχει την τιμή καμίας από τις σταθερές που δηλώνονται στον switch break; }
Η δομή επιλογής switch
στη γλώσσα προγραμματισμού αξιολογεί μια έκφραση και συγκρίνει την τιμή της με τις τιμές σταθερών που ορίζονται στις εντολές case
. Όταν βρίσκει μια σταθερά που έχει την ίδια τιμή με την έκφραση, εκτελείται ο κώδικας που βρίσκεται στο μπλοκ της αντίστοιχης εντολής case
. Η εντολή break
χρησιμοποιείται για να διακόψει την εκτέλεση του switch statement
και να αποφευχθεί η εκτέλεση των εντολών που ακολουθούν. Αν δεν υπάρχει εντολή break
, η εκτέλεση συνεχίζεται στην επόμενη εντολή case
χωρίς να γίνεται έλεγχος των υπόλοιπων case
. Τέλος, η εντολή default
χρησιμοποιείται για να παρέχεται μια προκαθορισμένη ενέργεια που θα εκτελεστεί αν η τιμή της έκφρασης δεν αντιστοιχεί σε καμία από τις σταθερές των εντολών case
.
Η δομή switch
είναι ένα χρήσιμο εργαλείο για την πολλαπλή επιλογή με βάση μια τιμή και μπορεί να βελτιστοποιήσει τον κώδικα, εξαλείφοντας την ανάγκη για πολλαπλά if-else
statements. Επίσης, είναι σημαντικό να χρησιμοποιείται η εντολή break
για να αποφεύγονται παρεμβολές στην εκτέλεση του κώδικα και να διασφαλίζεται η σωστή λειτουργία της δομής switch
.
Στο παρακάτω παράδειγμα χρησιμοποιούμε τον αριθμό του μήνα για να υπολογίσουμε το όνομα του μήνα:
#include <iostream> int main() { int month = 8; // Αριθμητική μεταβλητή που αντιπροσωπεύει τον μήνα std::string monthName; // Κενή συμβολοσειρά για την αποθήκευση του ονόματος του μήνα switch (month) { case 1: monthName = "January"; break; case 2: monthName = "February"; break; case 3: monthName = "March"; break; case 4: monthName = "April"; break; case 5: monthName = "May"; break; case 6: monthName = "June"; break; case 7: monthName = "July"; break; case 8: monthName = "August"; break; case 9: monthName = "September"; break; case 10: monthName = "October"; break; case 11: monthName = "November"; break; case 12: monthName = "December"; break; default: monthName = "Invalid month number"; // Προκαθορισμένη τιμή για μη έγκυρο αριθμό μήνα break; } std::cout << "The month is " << monthName << std::endl; // Εκτύπωση του ονόματος του μήνα return 0; }
[adinserter block=”2″]
Το πρόγραμμα δέχεται έναν αριθμό μήνα από τον χρήστη και εμφανίζει το αντίστοιχο όνομα του μήνα.
Αρχικά, δηλώνονται οι απαραίτητες μεταβλητές, όπως η μεταβλητή month
που αποθηκεύει τον αριθμό του μήνα και η μεταβλητή monthName
που θα αποθηκεύσει το όνομα του μήνα.
Στη συνέχεια, χρησιμοποιείται η δομή επιλογής switch
για να ελεγχθεί η τιμή της μεταβλητής month
. Ανάλογα με την τιμή της month
, αντιστοιχίζεται το αντίστοιχο όνομα του μήνα στη μεταβλητή monthName
. Αν η τιμή της month
είναι 1, η μεταβλητή monthName
θα πάρει την τιμή “January”. Αν η τιμή είναι 2, η monthName
θα γίνει “February”, και ούτω καθεξής. Αν η month
δεν αντιστοιχεί σε κάποια από τις έγκυρες τιμές 1 έως 12, τότε η μεταβλητή monthName
θα πάρει την τιμή “Invalid month number”.
Τέλος, το πρόγραμμα εκτυπώνει το όνομα του μήνα που αποθηκεύτηκε στη μεταβλητή monthName
χρησιμοποιώντας τη συνάρτηση std::cout
.
Έτσι, αν ο χρήστης εισάγει την τιμή 8, το πρόγραμμα θα εμφανίσει το μήνα “August” στην οθόνη.
Το “break” χρησιμοποιείται για να διακόψει την εκτέλεση ενός “switch statement” όταν εκτελείται ένα συγκεκριμένο “case” που ταιριάζει με την τιμή της έκφρασης που αξιολογείται.
Αν δεν χρησιμοποιηθεί το “break”, ο κώδικας θα συνεχίσει να εκτελείται στα επόμενα “cases” μέχρι να συναντήσει μια εντολή “break” ή να φτάσει στο τέλος του “switch statement”.
Παρακάτω παρατίθενται δύο παραδείγματα:
// Χωρίς keyword break switch (dayOfWeek) { case 0: std::cout << "Sunday" << std::endl; case 1: std::cout << "Monday" << std::endl; case 2: std::cout << "Tuesday" << std::endl; case 3: std::cout << "Wednesday" << std::endl; case 4: std::cout << "Thursday" << std::endl; case 5: std::cout << "Friday" << std::endl; case 6: std::cout << "Saturday" << std::endl; } // Με keyword break switch (dayOfWeek) { case 0: std::cout << "Sunday" << std::endl; break; case 1: std::cout << "Monday" << std::endl; break; case 2: std::cout << "Tuesday" << std::endl; break; case 3: std::cout << "Wednesday" << std::endl; break; case 4: std::cout << "Thursday" << std::endl; break; case 5: std::cout << "Friday" << std::endl; break; case 6: std::cout << "Saturday" << std::endl; break; }
Στο πρώτο παράδειγμα, δεν χρησιμοποιείται το keyword break, έτσι όταν η μεταβλητή dayOfWeek είναι ίση με 0, εκτυπώνεται το μήνυμα “Sunday”, αλλά συνεχίζει να εκτελείται και ο κώδικας στο case 1 (“Monday”), case 2 (“Tuesday”) και ούτω καθεξής, εμφανίζοντται στην οθόνη όλα τα μηνύματα από την πρώτη σταθερά που ταιριάζει μέχρι το τέλος του switch statement.
Στο δεύτερο παράδειγμα, χρησιμοποιείται το keyword break, έτσι όταν η μεταβλητή dayOfWeek είναι ίση με 0, εκτυπώνεται το μήνυμα “Sunday”, και η εκτέλεση διακόπτεται και δεν εκτελούνται οι υπόλοιπες εντολές του switch statement. Το ίδιο συμβαίνει και για τις υπόλοιπες σταθερές.
[adinserter block=”3″]
Το λέξεις-κλειδιά “break” και “default” χρησιμοποιούνται στη γλώσσα προγραμματισμού για τη διαχείριση του “switch statement”.
Το “break” είναι χρήσιμο για να διακοπεί η εκτέλεση του “switch statement” και να εξοικονομηθεί χρόνος εκτέλεσης κώδικα, όταν δεν απαιτείται να συνεχίσει η εκτέλεση των εντολών μετά από μια επιτυχημένη αντιστοίχιση.
Το “default” χρησιμοποιείται για να καθορίσει μια ενέργεια που θα εκτελείται όταν δεν υπάρχει αντιστοίχιση με τις σταθερές που έχουν δηλωθεί στις εντολές “case”. Δηλαδή, αν καμία από τις σταθερές που ελέγχονται στο “switch” δεν ταιριάζει, η εκτέλεση θα μεταφερθεί στο τμήμα “default” και οι εντολές που έχουν δηλωθεί εκεί θα εκτελεστούν.
Στο παρακάτω παράδειγμα, η μεταβλητή dayOfWeek έχει τιμή 10, η οποία δεν αντιστοιχεί σε καμία από τις σταθερές που έχουν δηλωθεί στις εντολές case. Στη συνέχεια, εκτελείται η εντολή που δηλώνεται στο default block, δηλαδή εμφανίζεται το μήνυμα “Invalid day of week”:
#include <iostream> int main() { int dayOfWeek = 2; // Ορίζουμε μια μεταβλητή dayOfWeek για να αντιπροσωπεύει την ημέρα της εβδομάδας switch (dayOfWeek) { case 0: std::cout << "Sunday" << std::endl; // Αν η dayOfWeek είναι 0, εκτυπώνουμε "Sunday" break; case 1: std::cout << "Monday" << std::endl; // Αν η dayOfWeek είναι 1, εκτυπώνουμε "Monday" break; case 2: std::cout << "Tuesday" << std::endl; // Αν η dayOfWeek είναι 2, εκτυπώνουμε "Tuesday" break; case 3: std::cout << "Wednesday" << std::endl; // Αν η dayOfWeek είναι 3, εκτυπώνουμε "Wednesday" break; case 4: std::cout << "Thursday" << std::endl; // Αν η dayOfWeek είναι 4, εκτυπώνουμε "Thursday" break; case 5: std::cout << "Friday" << std::endl; // Αν η dayOfWeek είναι 5, εκτυπώνουμε "Friday" break; case 6: std::cout << "Saturday" << std::endl; // Αν η dayOfWeek είναι 6, εκτυπώνουμε "Saturday" break; default: std::cout << "Invalid day of week" << std::endl; // Αν η dayOfWeek δεν αντιστοιχεί σε καμία από τις προηγούμενες περιπτώσεις, εκτυπώνουμε "Invalid day of week" break; } return 0; }
Ο παραπάνω κώδικας χρησιμοποιεί έναν διακόπτη (switch) για να ελέγξει την τιμή της μεταβλητής dayOfWeek
και να εκτελέσει ανάλογες ενέργειες ανάλογα με την τιμή αυτής της μεταβλητής. Αφού η τιμή της dayOfWeek
οριστεί σε 2, ο κώδικας θα εκτελέσει τον κώδικα που βρίσκεται στην περίπτωση (case) 2.
Το αποτέλεσμα στην οθόνη θα είναι:
Tuesday
Αυτό συμβαίνει επειδή η τιμή της μεταβλητής dayOfWeek
είναι 2 και ο κώδικας εκτελεί την εντολή std::cout << "Tuesday" << std::endl;
, που εκτυπώνει το κείμενο “Tuesday” στην οθόνη. Ο κώδικας συνεχίζει να εκτελείται μετά το switch και η main
συνάρτηση επιστρέφει την τιμή 0.