διακόπτη…περίπτωση στο C (Δήλωση αλλαγής στο C) με Παραδείγματα

Τι είναι το Switch Statement στο C;

Δήλωση αλλαγής στο 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

Παράδειγμα θήκης διακόπτη στο C

  1. Στο συγκεκριμένο πρόγραμμα έχουμε εξηγήσει το αρχικοποιημένο α μεταβλητή num με τιμή 8.
  2. Μια κατασκευή διακόπτη χρησιμοποιείται για τη σύγκριση της τιμής που είναι αποθηκευμένη στη μεταβλητή num και για την εκτέλεση του μπλοκ εντολών που σχετίζονται με την αντιστοιχισμένη περίπτωση.
  3. Σε αυτό το πρόγραμμα, δεδομένου ότι η τιμή που είναι αποθηκευμένη στη μεταβλητή 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, μπορούμε να έχουμε έναν εσωτερικό διακόπτη ενσωματωμένο σε έναν εξωτερικό διακόπτη. Επίσης, οι σταθερές περίπτωσης του εσωτερικού και του εξωτερικού διακόπτη μπορεί να έχουν κοινές τιμές και χωρίς συγκρούσεις.

Θεωρούμε το παρακάτω πρόγραμμα το οποίο ο χρήστης θα πληκτρολογήσει το δικό του αναγνωριστικό, εάν το αναγνωριστικό είναι έγκυρο θα του ζητήσει να εισάγει τον κωδικό πρόσβασής του, εάν ο κωδικός είναι σωστός το πρόγραμμα θα εκτυπώσει το όνομα του χρήστη, διαφορετικά το πρόγραμμα θα εκτυπώσει λάθος Κωδικός πρόσβασης και εάν το αναγνωριστικό δεν υπάρχει, το πρόγραμμα θα εκτυπώσει λάθος αναγνωριστικό

#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

Ένθετος διακόπτης στο C

  1. Στο συγκεκριμένο πρόγραμμα έχουμε εξηγήσει αρχικοποιημένες δύο μεταβλητές: ID και κωδικός πρόσβασης
  2. Μια κατασκευή εξωτερικού διακόπτη χρησιμοποιείται για τη σύγκριση της τιμής που έχει εισαχθεί στο ID της μεταβλητής. Εκτελεί το μπλοκ των δηλώσεων που σχετίζονται με την αντιστοιχισμένη περίπτωση (όταν ID==500).
  3. Εάν η εντολή μπλοκ εκτελείται με την αντιστοιχισμένη περίπτωση, χρησιμοποιείται ένας εσωτερικός διακόπτης για τη σύγκριση των τιμών που έχουν εισαχθεί στον κωδικό πρόσβασης της μεταβλητής και για την εκτέλεση των δηλώσεων που συνδέονται με την αντιστοιχισμένη περίπτωση (όταν κωδικός πρόσβασης==000).
  4. Διαφορετικά, η θήκη διακόπτη θα ενεργοποιήσει την προεπιλεγμένη περίπτωση και θα εκτυπώσει το κατάλληλο κείμενο σχετικά με το περίγραμμα του προγράμματος.

Γιατί χρειαζόμαστε μια θήκη Switch;

Υπάρχει ένα πιθανό πρόβλημα με το αν-άλλο δήλωση που είναι η πολυπλοκότητα του προγράμματος αυξάνεται κάθε φορά που αυξάνεται ο αριθμός των εναλλακτικών διαδρομών. Εάν χρησιμοποιείτε πολλές δομές if-else στο πρόγραμμα, ένα πρόγραμμα μπορεί να γίνει δύσκολο να διαβαστεί και να κατανοηθεί. Μερικές φορές μπορεί ακόμη και να μπερδέψει τον προγραμματιστή που έγραψε ο ίδιος το πρόγραμμα.

Η λύση σε αυτό το πρόβλημα είναι η εντολή switch.

Κανόνες για δήλωση διακόπτη

  • Μια έκφραση πρέπει πάντα να εκτελείται σε ένα αποτέλεσμα.
  • Οι ετικέτες πεζών πρέπει να είναι σταθερές και μοναδικές.
  • Οι ετικέτες πεζών πρέπει να τελειώνουν με άνω και κάτω τελεία ( : ).
  • Πρέπει να υπάρχει μια λέξη-κλειδί διακοπής σε κάθε περίπτωση.
  • Μπορεί να υπάρχει μόνο μία προεπιλεγμένη ετικέτα.
  • Μπορούμε να ενσωματώσουμε πολλαπλές εντολές διακόπτη.

Σύνοψη

  • Ο διακόπτης είναι μια κατασκευή λήψης αποφάσεων στο "C".
  • Ένας διακόπτης χρησιμοποιείται σε ένα πρόγραμμα όπου εμπλέκονται πολλαπλές αποφάσεις.
  • Ένας διακόπτης πρέπει να περιέχει μια εκτελέσιμη δοκιμαστική έκφραση.
  • Κάθε περίπτωση πρέπει να περιλαμβάνει μια λέξη-κλειδί διακοπής.
  • Η ετικέτα πεζών-κεφαλαίων πρέπει να είναι σταθερές και μοναδικές.
  • Η προεπιλογή είναι προαιρετική.
  • Πολλαπλές δηλώσεις διακόπτη μπορούν να ενσωματωθούν η μία μέσα στην άλλη.