prof. Nunzio Brugaletta Programmazione e linguaggio C

EnneBi - Programmazione
Avanti Indietro Inizio


3.6 La scelta multipla: istruzioni switch-case e break

Esiste nel linguaggio C un'altra istruzione per codificare la scelta multipla. È necessario fare attenzione però alle diversità di comportamento. Sintatticamente la struttura si presenta in questo modo:

switch(espressione)
  case valore:
    istruzione
  case valore:
    istruzione
  ...
  default:
    istruzione

In pratica in questo caso vengono valutati i diversi valori che può assumere una espressione. Nelle varie istruzioni case si elencano i valori che può assumere espressione e che interessano per l’elaborazione. Valutata l’espressione specificata, se il valore non coincide con alcuno di quelli specificati, viene eseguita l’istruzione compresa nella clausola default. Occorre tenere presente che, sostanzialmente, i vari case esistenti agiscono da etichette: se espressione assume un valore specificato in un case, vengono eseguite le istruzioni a partire da quel punto in poi. Il valore specificato in case, in definitiva, assume funzione di punto di ingresso nella struttura.

Se si vuole delimitare l’istruzione da eseguire a quella specificata nella case che verifica il valore cercato, occorre inserire l’istruzione break che fa proseguire l’elaborazione dall’istruzione successiva alla chiusura della struttura.

Per chiarire meglio il funzionamento della struttura viene riproposto il programma del conteggio delle parentesi di una espressione algebrica. Stavolta si farà uso della nuova struttura.

/*
  Conta i vari tipi di parentesi contenute in una espressione algebrica 
  (non fa distinzione fra parentesi aperte e chiuse)
*/

#include <stdio.h>
main(){
  char espress[30]; 
  int pargraf,parquad,partond;
  int c;
  
  printf("\nEspressione algebrica ");
  gets(espress); 
  pargraf=parquad=partond=0;

  for(c=0;c<30 && espress[c]!=‘\0’;c++) { 
    switch(espress[c]) {	/*1*/
      case ‘{’:; case ‘}’:	/*2*/ 
        pargraf++;
        break;	/*3*/
      case ‘[’:; case ‘]’:	/*2*/
        parquad++;
        break;	/*3*/
      case ‘(’:; case ‘)’:	/*2*/
        partond++;
        break;
    };
  };
  printf("\nGraffe = %d",pargraf); 
  printf("\nQuadre = %d",parquad);
  printf("\nTonde = %d",partond);
}

Nella riga con etichetta 1 viene specificata l’espressione da valutare: espress[c] cioè il carattere estratto dall’espressione algebrica.

Nelle 2 si esaminano i casi parentesi aperta o parentesi chiusa. I singoli valori sono seguiti dalla istruzione nulla (il solo carattere ;) e, poiché l’elaborazione continua da quel punto in poi, sia che si tratti di parentesi aperta che di parentesi chiusa si arriva all’aggiornamento del rispettivo contatore.

Nelle 3 si blocca l’esecuzione del programma altrimenti, per esempio, una parentesi graffa oltre che come graffa verrebbe conteggiata anche come quadra e tonda, una parentesi quadra verrebbe conteggiata anche come tonda. Si noti che, anche se sono presenti due istruzioni, non vengono utilizzate parentesi per delimitare il blocco: il funzionamento della switch-case prevede infatti la continuazione dell’elaborazione con l’istruzione successiva. L’ultima istruzione break è inserita solo per coerenza con gli altri casi. Inoltre se in seguito si dovesse aggiungere una istruzione default, il programma continuerebbe a dare risultati coerenti senza necessità di interventi se non nella parte da inserire.



Avanti Indietro Inizio

http://ennebi.solira.org ennebi@solira.org