Structures de contrôle - tests

Écrit le 11/11/2004 par Wikibooks
Dernière mise à jour : 02/02/2006

Les tests permettent d'effectuer des opérations différentes si une condition est vérifiée ou non.

Test if

Syntaxe

if ( condition ) {
    bloc
}
else {
    autre bloc
}

Si la condition est vérifiée alors on exécute le bloc d'instructions, sinon on exécute l'autre bloc. La clause else est facultative, qui plus est une clause else se réfère toujours à la dernière instruction if rencontrée. Considérez le code, mal indenté, suivant :

/* Ce code est volontairement indenté de manière ambigu */
if( condition )
    if( autre_condition ) /* ... */ ;
else
    /* ... */ ;

Dans ce dernier exemple la clause else se rapportait bien-sûr au second if selon la règle énoncée ci-dessus. Un bon compilateur devrait vous avertir que cette construction est ambiguë, et que vous devriez la réécrire :

if( condition )
{
    if( autre_condition ) /* ... */ ;
}
else /* ... */ ;

D'ailleurs, lorsqu'un if contient une instruction (for, do, while, switch, goto, return, etc.) il est conseillé de la mettre entre accolade.

Test switch

Cette instruction permet de tester si une variable concorde avec un certain nombre de constante, et d'exécuter une action par défaut dans le cas où aucune valeur n'a concordée. Ce, de manière beaucoup plus efficace et lisible qu'une succession de if/else imbriqué. Insistons sur le terme constante, il est en effet impossible d'utiliser des expressions dont la valeur n'est pas connue à la compilation (c'est à dire de variable dans les instructions case).

Syntaxe

switch( variable )
{
    case valeur1:
       bloc1
    case valeur2:
       bloc2
...
    case valeurN:
       blocN
    default:
       blocD
}

Compare la valeur de la variable à celles de valeur1, valeur2, ..., valeurN. En cas d'égalité entre variable et valeurI les blocs sont exécutés séquentiellement à partir de
blocI, et ce jusqu'à la fin de l'instruction switch. Si variable est égale à valeur2,
dans cet exemple, les blocs bloc2 à blocN et même blocD seront exécutés. Pour empécher
ce comportement on utilise l'instruction break, que l'on peut placer à n'importe quel endroit
pour sortir (aller à la fin) de l'instruction switch. En général on retrouve plus fréquemment l'instruction switch écrite de la sorte :

switch( variable )
{
    case valeur1:
       bloc1
       break;
    case valeur2:
       bloc2
       break;
...
    case valeurN:
       blocN
       /* pas de break; */
    default:
       blocD
}

C'est en fait tellement rare de ne pas mettre de break entre les différents cas, qu'il est conseillé de mettre un commentaire pour les cas où cette instruction est délibérément omise, ça permet de bien signaler au lecteur qu'il ne s'agit pas d'un oubli.

Test rapide

test ? expression_si_vrai : expression_si_faux

Exemple

int main(int argc, char **argv) {
    printf("%s\n", (argc < 2) ? "vous n'avez pas donné d'argument" : "vous avez donné au moins un argument");
}

Ce mini-programme teste si le nombre d'arguments passé à main est inférieur à 2 avec l'expression (argc < 2) et renvoie "vous n'avez pas donné d'argument" si l'expression est vraie et "vous avez donné au moins un argument" sinon. Le résultat de l'évaluation est alors passé à la fonction printf qui affiche le résultat.

Cet article provient de Wikibooks et est sous licence GNU Free Documentation License. Il a été écrit par plusieurs personnes et est constamment mis à jour. Cet article est la version du 12 avrol 2005 à 18:58. L'article d'origine se trouve à http://fr.wikibooks.org/wiki/Programmation_C_Tests.