switch, break et continue

Approfondir : switch, break et continue

if exprime des conditions générales. switch exprime un choix selon une valeur entière précise, par exemple un numéro de menu. break et continue modifient ensuite le déroulement d’un switch ou d’une boucle ; ils ne sont pas interchangeables.

Une correspondance entre valeurs et actions

L’expression d’un switch doit avoir un type entier. Un char convient également, par exemple pour les opérateurs '+', '-', '*' et '/'. Les étiquettes case sont des expressions constantes entières distinctes ; une variable lue au clavier ne peut pas servir d’étiquette. On ne peut pas comparer directement une chaîne à plusieurs textes avec switch.

Le rôle de break

Après avoir trouvé un case, l’exécution continue dans les instructions suivantes jusqu’à un break, un return ou la fin du switch. Un break explicite évite donc de poursuivre dans le case suivant. Ce passage d’un cas au suivant peut être intentionnel, mais il doit être clairement documenté. Pour des débutants, un case terminé par break rend chaque choix indépendant.

default et validation

default s’exécute si aucun case ne correspond. Il permet d’annoncer un choix inconnu. Il n’est pas obligatoire, mais ignorer un choix inattendu produit souvent une interface déroutante. Un switch ne vérifie pas que scanf a réussi : la lecture doit être contrôlée séparément avant d’utiliser la valeur.

continue appartient à une boucle

Dans une boucle, continue passe à l’itération suivante. Dans un for, l’expression de progression est exécutée avant le nouveau test ; dans un while, on revient directement au test. Si la progression du while était écrite après le continue, elle sera sautée : c’est une cause fréquente de boucle infinie. Dans un switch placé dans une boucle, continue vise la boucle, tandis que break quitte seulement le switch.

Quand préférer if

Les intervalles comme note<10, les conditions composées et les comparaisons de réels relèvent naturellement de if/else. Un switch n’est pas une écriture pour une plage 10 à 12. Utiliser une cascade de cases pour chaque entier serait peu lisible et ne couvrirait pas les décimaux. La structure de contrôle doit refléter le domaine des données.

Choix : menu avec switch

#include <stdio.h>
int main(void) {
    int choix;
    puts("Choisir 1 (bonjour) ou 2 (aide) :");
    if (scanf("%d", &choix) != 1) {
        puts("Saisie invalide.");
        return 1;
    }
    switch (choix) {
        case 1: puts("Bonjour !"); break;
        case 2: puts("Aide : choisir un numero."); break;
        default: puts("Choix inconnu."); break;
    }
    return 0;
}
Suivre le programme : Choix, menu avec switch
Instruction ou étapeExplication
Lecturechoix n’est utilisé que si la conversion entière réussit.
case 1Affiche Bonjour puis quitte le switch ; case 2 n’est pas exécuté.
defaultUne valeur comme 7 reçoit un message explicite.
breakSort du switch, puis main atteint return 0.

Sortie écran : essai 1

Le premier case est choisi.

Choisir 1 (bonjour) ou 2 (aide) :
1
Bonjour !

Sortie écran : essai 2

Le deuxième case est choisi.

Choisir 1 (bonjour) ou 2 (aide) :
2
Aide : choisir un numero.

Sortie écran : essai 3

Aucun case ne correspond.

Choisir 1 (bonjour) ou 2 (aide) :
7
Choix inconnu.

Choix : sauter et arrêter des tours

#include <stdio.h>
int main(void) {
    for (int i = 1; i <= 6; ++i) {
        if (i == 2) { continue; }
        if (i == 5) { break; }
        printf("%d\n", i);
    }
    return 0;
}
Suivre le programme : Choix, sauter et arrêter des tours
Instruction ou étapeExplication
i=1Aucun test ne coupe le tour : affichage de 1.
i=2continue saute printf, mais le ++i du for est exécuté.
i=3 et i=4Affichages de 3 puis 4.
i=5break termine la boucle avant l’affichage ; 6 n’est jamais visité.

Sortie écran : essai 1

Le tour 2 est sauté ; la boucle est arrêtée à 5.

1
3
4

S’entraîner et vérifier

Exercice 1. Que changer pour accepter aussi le choix 3 comme une demande d’aide ?

Voir la correctionMasquer la correction

Placer case 3: juste avant case 2: afin que les deux étiquettes partagent le même message et le même break. Il s’agit d’un regroupement intentionnel.

Exercice 2. Un break quitte-t-il deux boucles imbriquées ?

Voir la correctionMasquer la correction

Non, il quitte la boucle ou le switch le plus proche qui l’entoure. Pour sortir de plusieurs niveaux, restructurer le calcul, utiliser une condition commune ou une fonction et return.

Pratiquer avec le TD/TP 1 corrigé · Tous les exercices C.

Repère de lecture : les codes proposés utilisent des constructions disponibles en C11. Les règles du langage et de sa bibliothèque sont consultables dans les projets publics du WG14 (C11) et du WG14 (C23). Les exemples n’utilisent pas les nouveautés propres à C23.

Questions / Réponses

Aucune question. Soyez le premier à poser une question.
★ ★ ★ ★ ★
2 votes. Moyenne 5 sur 5.

Ajouter un commentaire

Anti-spam