διακόπτη…περίπτωση στο C (Δήλωση αλλαγής στο C) με Παραδείγματα
⚡ Έξυπνη Σύνοψη
Η πρόταση Switch στη C συγκρίνει μια έκφραση με πολλαπλές ετικέτες πεζών-κεφαλαίων και εκτελεί το αντίστοιχο μπλοκ, προσφέροντας μια πιο καθαρή εναλλακτική λύση στις μεγάλες αλυσίδες if-else όταν ένα πρόγραμμα πρέπει να επιλέξει ανάμεσα σε πολλές σταθερές ακέραιες τιμές ή τιμές χαρακτήρων.

Τι είναι το Switch Statement στο C;
Η εντολή Switch στη C ελέγχει την τιμή μιας μεταβλητής και τη συγκρίνει με πολλαπλές περιπτώσεις. Μόλις βρεθεί η αντιστοίχιση περίπτωσης, εκτελείται ένα μπλοκ εντολών που σχετίζονται με αυτήν τη συγκεκριμένη περίπτωση.
Κάθε περίπτωση σε ένα μπλοκ διακόπτη έχει διαφορετικό όνομα/αριθμό που αναφέρεται ως αναγνωριστικό. Η τιμή που παρέχεται από τον χρήστη συγκρίνεται με όλες τις περιπτώσεις μέσα στο μπλοκ διακόπτη μέχρι να βρεθεί το ταίριασμα.
Εάν ΔΕΝ βρεθεί αντιστοίχιση περίπτωσης, τότε εκτελείται η προεπιλεγμένη πρόταση και το στοιχείο ελέγχου βγαίνει από το μπλοκ διακόπτη.
Switch Case Syntax
Μια γενική σύνταξη του τρόπου με τον οποίο εφαρμόζεται η περίπτωση μεταγωγής σε ένα πρόγραμμα «C» είναι η εξής:
switch( expression ) { case value-1: Block-1; Break; case value-2: Block-2; Break; case value-n: Block-n; Break; default: Block-1; Break; } Statement-x;
- Η έκφραση μπορεί να είναι έκφραση ακέραιου αριθμού ή έκφραση χαρακτήρα.
- Οι τιμές-1, 2, n είναι ετικέτες πεζών-κεφαλαίων που χρησιμοποιούνται για τον προσδιορισμό κάθε περίπτωσης ξεχωριστά. Να θυμάστε ότι οι ετικέτες πεζών-κεφαλαίων δεν πρέπει να είναι ίδιες καθώς μπορεί να δημιουργήσουν πρόβλημα κατά την εκτέλεση ενός προγράμματος. Ας υποθέσουμε ότι έχουμε δύο περιπτώσεις με την ίδια ετικέτα με το '1'. Στη συνέχεια, κατά την εκτέλεση του προγράμματος, η περίπτωση που εμφανίζεται πρώτη θα εκτελεστεί ακόμα κι αν θέλετε το πρόγραμμα να εκτελέσει μια δεύτερη περίπτωση. Αυτό δημιουργεί προβλήματα στο πρόγραμμα και δεν παρέχει την επιθυμητή έξοδο.
- Οι ετικέτες πεζών-κεφαλαίων τελειώνουν πάντα με άνω και κάτω τελεία ( : ). Κάθε μία από αυτές τις περιπτώσεις σχετίζεται με ένα μπλοκ.
- Ένα μπλοκ δεν είναι παρά πολλαπλές δηλώσεις που ομαδοποιούνται για μια συγκεκριμένη περίπτωση.
- Κάθε φορά που εκτελείται ο διακόπτης, η τιμή της δοκιμαστικής έκφρασης συγκρίνεται με όλες τις περιπτώσεις που έχουμε ορίσει μέσα στο διακόπτη. Ας υποθέσουμε ότι η έκφραση δοκιμής περιέχει την τιμή 4. Αυτή η τιμή συγκρίνεται με όλες τις περιπτώσεις μέχρι την περίπτωση της οποίας η ετικέτα τέσσερα βρίσκεται στο πρόγραμμα. Μόλις βρεθεί μια υπόθεση, εκτελείται το μπλοκ εντολών που σχετίζονται με τη συγκεκριμένη περίπτωση και ο έλεγχος σβήνει από το διακόπτη.
- Η λέξη-κλειδί διάλειμμα σε κάθε περίπτωση υποδηλώνει το τέλος μιας συγκεκριμένης περίπτωσης. Αν δεν βάλουμε το break σε κάθε περίπτωση, τότε παρόλο που εκτελείται η συγκεκριμένη περίπτωση, ο διακόπτης στο C θα συνεχίσει να εκτελεί όλες τις περιπτώσεις μέχρι να φτάσει στο τέλος. Αυτό δεν πρέπει να συμβεί. Ως εκ τούτου, πρέπει πάντα να βάζουμε λέξη-κλειδί διάλειμμα σε κάθε περίπτωση. Το Break θα τερματίσει την υπόθεση μόλις εκτελεστεί και το χειριστήριο θα πέσει έξω από το διακόπτη.
- Η προεπιλεγμένη περίπτωση είναι προαιρετική. Όποτε η τιμή της δοκιμαστικής έκφρασης δεν ταιριάζει με καμία από τις περιπτώσεις μέσα στο διακόπτη, τότε θα εκτελεστεί η προεπιλογή. Διαφορετικά, δεν είναι απαραίτητο να γράψετε προεπιλογή στο διακόπτη.
- Μόλις εκτελεστεί ο διακόπτης, το στοιχείο ελέγχου θα μεταβεί στην εντολή-x και η εκτέλεση ενός προγράμματος θα συνεχιστεί.
Διάγραμμα ροής δήλωσης μεταγωγής
Το παρακάτω διάγραμμα δείχνει πώς επιλέγεται μια θήκη σε περίπτωση διακόπτη:
Πώς λειτουργεί ο διακόπτης
Παράδειγμα θήκης διακόπτη στο C
Το παρακάτω πρόγραμμα απεικονίζει τη χρήση του διακόπτη:
#include <stdio.h> int main() { int num = 8; switch (num) { case 7: printf("Value is 7"); break; case 8: printf("Value is 8"); break; case 9: printf("Value is 9"); break; default: printf("Out of range"); break; } return 0; }
Παραγωγή:
Value is 8
- Στο δεδομένο πρόγραμμα έχουμε αρχικοποιήσει ένα μεταβλητή num με τιμή 8.
- Μια κατασκευή διακόπτη χρησιμοποιείται για τη σύγκριση της τιμής που είναι αποθηκευμένη στη μεταβλητή num και για την εκτέλεση του μπλοκ εντολών που σχετίζονται με την αντιστοιχισμένη περίπτωση.
- Σε αυτό το πρόγραμμα, δεδομένου ότι η τιμή που είναι αποθηκευμένη στη μεταβλητή num είναι οκτώ, ένας διακόπτης θα εκτελέσει την υπόθεση της οποίας η ετικέτα περίπτωσης είναι 8. Μετά την εκτέλεση της υπόθεσης, το στοιχείο ελέγχου θα πέσει έξω από το διακόπτη και το πρόγραμμα θα τερματιστεί με το επιτυχές αποτέλεσμα με εκτύπωση της τιμής στην οθόνη εξόδου.
Δοκιμάστε να αλλάξετε την τιμή της μεταβλητής num και παρατηρήστε την αλλαγή στην έξοδο.
Για παράδειγμα, λαμβάνουμε υπόψη το ακόλουθο πρόγραμμα το οποίο είναι προεπιλεγμένο:
#include <stdio.h> int main() { int language = 10; switch (language) { case 1: printf("C#\n"); break; case 2: printf("C\n"); break; case 3: printf("C++\n"); break; default: printf("Other programming language\n");}}
Παραγωγή:
Other programming language
Όταν εργάζεστε με θήκη διακόπτη στο C, ομαδοποιείτε πολλές θήκες με μοναδικές ετικέτες. Πρέπει να εισάγετε μια πρόταση break σε κάθε περίπτωση σε διακλάδωση στο τέλος μιας δήλωσης switch.
Η προαιρετική προεπιλεγμένη περίπτωση εκτελείται όταν δεν γίνονται άλλες αντιστοιχίσεις.
Λαμβάνουμε υπόψη την ακόλουθη δήλωση διακόπτη:
#include <stdio.h> int main() { int number=5; switch (number) { case 1: case 2: case 3: printf("One, Two, or Three.\n"); break; case 4: case 5: case 6: printf("Four, Five, or Six.\n"); break; default: printf("Greater than Six.\n");}}
Παραγωγή:
Four, Five, or Six.
Ένθετος διακόπτης στο C
In C, μπορούμε να έχουμε έναν εσωτερικό διακόπτη ενσωματωμένο σε έναν εξωτερικό διακόπτη. Επίσης, οι σταθερές περίπτωσης του εσωτερικού και του εξωτερικού διακόπτη μπορεί να έχουν κοινές τιμές και χωρίς συγκρούσεις.
Θεωρούμε το ακόλουθο πρόγραμμα, το οποίο ζητά από τον χρήστη να πληκτρολογήσει το δικό του αναγνωριστικό (ID). Εάν το αναγνωριστικό είναι έγκυρο, θα του ζητήσει να εισάγει τον κωδικό πρόσβασής του. Εάν ο κωδικός πρόσβασης είναι σωστός, το πρόγραμμα θα εκτυπώσει το όνομα του χρήστη, διαφορετικά θα εκτυπώσει την ένδειξη "Λανθασμένος κωδικός πρόσβασης" και, εάν το αναγνωριστικό δεν υπάρχει, θα εκτυπώσει την ένδειξη "Λανθασμένο αναγνωριστικό".
#include <stdio.h> int main() { int ID = 500; int password = 000; printf("Plese Enter Your ID:\n "); scanf("%d", & ID); switch (ID) { case 500: printf("Enter your password:\n "); scanf("%d", & password); switch (password) { case 000: printf("Welcome Dear Programmer\n"); break; default: printf("incorrect password"); break; } break; default: printf("incorrect ID"); break; } }
Παραγωγή:
Plese Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer
- Στο συγκεκριμένο πρόγραμμα έχουμε αρχικοποιήσει δύο μεταβλητές: το ID και τον κωδικό πρόσβασης.
- Μια εξωτερική δομή διακόπτη χρησιμοποιείται για τη σύγκριση της τιμής που εισάγεται στη μεταβλητή ID. Εκτελεί το μπλοκ δηλώσεων που σχετίζονται με την αντιστοιχισμένη περίπτωση (όταν ID==500).
- Εάν η πρόταση block εκτελεστεί με την αντίστοιχη περίπτωση, χρησιμοποιείται ένας εσωτερικός διακόπτης για να συγκρίνει τις τιμές που εισάγονται στη μεταβλητή password και να εκτελέσει τις εντολές που συνδέονται με την αντίστοιχη περίπτωση (όταν password==000).
- Διαφορετικά, η θήκη διακόπτη θα ενεργοποιήσει την προεπιλεγμένη περίπτωση και θα εκτυπώσει το κατάλληλο κείμενο σχετικά με το περίγραμμα του προγράμματος.
Γιατί χρειαζόμαστε μια θήκη Switch;
Υπάρχει ένα πιθανό πρόβλημα με το αν-άλλο δήλωση που είναι η πολυπλοκότητα του προγράμματος αυξάνεται κάθε φορά που αυξάνεται ο αριθμός των εναλλακτικών διαδρομών. Εάν χρησιμοποιείτε πολλές δομές if-else στο πρόγραμμα, ένα πρόγραμμα μπορεί να γίνει δύσκολο να διαβαστεί και να κατανοηθεί. Μερικές φορές μπορεί ακόμη και να μπερδέψει τον προγραμματιστή που έγραψε ο ίδιος το πρόγραμμα.
Η λύση σε αυτό το πρόβλημα είναι η εντολή switch.
Κανόνες για δήλωση διακόπτη
Ακολουθήστε αυτούς τους κανόνες όταν γράφετε ένα switch σε C:
- Μια έκφραση πρέπει πάντα να εκτελείται σε ένα αποτέλεσμα.
- Οι ετικέτες πεζών πρέπει να είναι σταθερές και μοναδικές.
- Οι ετικέτες πεζών πρέπει να τελειώνουν με άνω και κάτω τελεία ( : ).
- Πρέπει να υπάρχει μια λέξη-κλειδί διακοπής σε κάθε περίπτωση.
- Μπορεί να υπάρχει μόνο μία προεπιλεγμένη ετικέτα.
- Μπορούμε να ενσωματώσουμε πολλαπλές εντολές διακόπτη.



