Μαθήματα Πληροφορικής & Προγραμματισμού C

Λογικοί έλεγχοι στη C με την εντολή switch

C με την εντολή switch

Η εντολή switch είναι η πλέον κατάλληλη όταν έχουμε να επιλέξουμε από πολλές εναλλακτικές περιπτώσεις, όπου η χρήση διαδοχικών if else δυσκολεύει πολύ τον κώδικα του προγράμματος.

Ακολουθεί ένα πρόγραμμα, στο οποίο διαβάζουμε ένα γράμμα και μετά μας δίνει το όνομα μιας γυναίκας που ν’ αρχίζει μ’ αυτό το γράμμα.

/* χρήση της εντολής switch */

#include 
main(){
  char ch;
  printf("Δώστε ένα γράμμα του λατινικού αλφαβήτου.");
  printf("Πατήστε # για να τελειώσει το πρόγραμμα: \n");
  while ((ch = getchar()) != ‘#’){
     if (ch >= ‘a’ && ch <= ‘z’) /* δέχεται μόνο */
        switch (ch){     /* μικρά γράμματα */
           case ‘a’:
              printf("Athina \n");
           break;
           case ‘b’:
               printf("Beatrice \n");
           break;
           case ‘c’:
               printf("Cathrin \n");
           break;
           case ‘d’:
               printf("Dimitra \n");
           break;
           case ‘h’:
               printf("Helen \n");
           break;
           default:
             printf("Δεν υπάρχει τέτοιο όνομα κατχωρημένο στις περιτπώσεις μου.\n");

      }    /* τέλος της switch */
   else
       printf("Αναγνωρίζω μόνο μικρά γράμματα \n");
   while (getchar() != ‘\n’);   /* παρέλειψε το υπόλοιπο της γραμμής εισόδου */
       printf("Παρακαλώ, δώστε ένα άλλο γράμμα ή #.\n");
  }   /* τέλος βρόχου while */
}

Η εντολή switch δουλεύει ως εξής:

Πρώτα, υπολογίζεται η έκφραση μέσα στις παρενθέσεις, που ακολουθεί την switch. Μετά, το πρόγραμμα σαρώνει τον κατάλογο με τις ετικέττες case μέχρι να βρει μια που να ταιριάζει μ’ αυτήν την τιμή. Τότε, το πρόγραμμα πηγαίνει σ’ αυτήν την γραμμή και εκτελεί τις εντολές που περιέχονται σ’ αυτήν. Αν δεν ταιριάζει με καμία επιλογή, τότε το πρόγραμμα πηγαίνει στην γραμμή με την ετικέττα default, αν υπάρχει αυτή βέβαια. Αν δεν υπάρχει η επιλογή default, τότε το πρόγραμμα συνεχίζει κανονικά στην επόμενη εντολή μετά την switch.

Αν δεν υπήρχε η πρόταση break, τότε το πρόγραμμα θα εκτελούσε κάθε πρόταση από την ετικέττα ταύτισης μέχρι και το τέλος της πρότασης switch. Δεν μπορούμε να χρησιμοποιήσουμε μια μεταβλητή για ετικέττα στην πρόταση switch, αλλά μόνο εκφράσεις σταθερών τύπου int ή char.

C και η εντολή switch: Η δομή της εντολής switch είναι η εξής:


switch (ακέραια έκφραση){
case σταθερά 1:
προτάσεις; (προεραιτικά)
case σταθερά 2:
προτάσεις; (προεραιτικά)

default: (προεραιτικά)
προτάσεις; (προεραιτικά)
}

Η Εντολή Break

Η εντολή αυτή μπορεί να χρησιμοποιηθεί με τη switch, όπως είδαμε νωρίτερα, αλλά και με τις υπόλοιπες τρεις δομές βρόχου και έχει ως αποτέλεσμα την διακοπή της εκτέλεσης των εντολών switch, for, while και do while και την μετάβαση στο επόμενο στάδιο του προγράμματος. Ακολουθεί ένα κομμάτι προγράμματος που σταματά έναν βρόχο όταν διαβαστεί είτε ένα πλήκτρο enter ή ένα πλήκτρο tab:

while ((ch=getchar()) != '\n'){
   if (ch == '\t')
      break;
   putchar(ch);
}

Το παραπάνω κομμάτι προγράμματος θα μπορούσε να δουλέψει και ως εξής :

while ((ch=getchar()) != '\n' && ch != '\t')
    putchar(ch);

Η Εντολή Continue

Αυτή η εντολή μπορεί να χρησιμοποιηθεί και στα τρία είδη βρόχων, αλλά όχι με την πρόταση switch. Και η continue διακόπτει την ροή ενός προγράμματος, αλλά αντί να τερματίζει ολόκληρο τον βρόχο, έχει ως αποτέλεσμα την μη εκτέλεση του υπόλοιπου τμήματος του βρόχου και την επανάληψή του από την αρχή.

Σ’ έναν βρόχο while ή for, ξαναρχίζει ο επόμενος κύκλος του βρόχου, ενώ σ’ έναν βρόχο do while ελέγχεται η συνθήκη εξόδου και μετά, αν χρειαστεί, αρχίζει ο επόμενος κύκλος του βρόχου. Τα δύο παραπάνω κομμάτια προγράμματος θα μπορούσαν να γραφούν τώρα ως εξής :

while ((ch=getchar()) != '\n'){
  if (ch == '\t')
    continue;
  putchar(ch);
}

Δηλαδή ο βρόχος σταματάει τώρα μόνο με το πλήκτρο enter και όχι και με το tab. Το παραπάνω κομμάτι προγράμματος θα μπορούσε να δουλέψει κι έτσι :

while ((ch=getchar()) != '\n')
   if (ch != '\t')
       putchar(ch);

Αφήστε ένα Σχόλιο

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.