instruction for

Syntaxe

for (initialisationopt ; conditionopt, progressionopt) instruction ;

Inititialisation, condition et progression sont des expressions.

C’est l’équivalent de :

initialisation ;

while (condition) {

instruction ;

progression ;

}

Exemples

Initialisation d’un tableau

int  i ;

for (i=0; i< 10 ; i++)

tableau [i] = 0 ;

La variable i est souvent appelée variable de contrôle de la boucle (voir en fin d'article l'évolution apportée par C99).

 

Réalisation de la fonction atoi (conversion d’une chaine de caractères en valeur de type entier)

int atoi (char s[]) { /* le paramètre st un tableau dont on ne connait pas la taille */

int i ; int n ; int sign ;

/* Recherche de l'indice i du premier caractère non blanc */

for (i = 0 ; s [i] == ' ' ; i++) ;

/* Et s'il n'y en avait pas? */

/* s [i] != ' ' */

sign = 1 ; /* pas des signe est équivalent à nombre positif */

if ()

}

 

Une boucle infinie for ( ; ; ) { … } ; qui sert en programmation système. Toute sa vie un driver boucle sur l’exécution d’une entrée-sortie.

for ( ; ; ) {

dormir () ;

manger () ;

jouer () :

} ;

for ( ; ; ) est équivalent à while (1) (tant que vrai vaut vrai)

Vérifier que les l premiers caractères d'une chaines s forment un palindrome

Cet exemple illustre une force de C, à savoir la possibilité d'avoir deux varaibles de contrôle (i et j) pour une même boucle.

int palindrome (int longueur ; char s[]) {

int i ; int j ; /* On utilise deux variables i et j */

/* A l'initialisation i vaut 0 et i est incrémenté à chaque itération */

/* A l'initialisation j est l'indice du dernier caractères et j est décrémenté à chaque itération */

for ( i=0 , j = longueur-1 ; i < j ; i++ , j --)

if (s[i] != s[j])) 

return 0 ; /* false */    /* Ce n'est pas un palindrome */

return 1 ; /* true */   /* Tous les caractères 2 à 2 étaient égaux. On est sorti de la boucle car i >= j  */

}

Notez la notation i = 0 , j= i-1 . Le caractère "," est l'opérateur de séquence, on évalue l'expression i = 0 (qui fait un effet de bord, à savoir changer la valeur de i), puis on évalue l'expression j= i-1 (qui fait aussi un effet de bord).

Ce même opérateur est utilisé dans  i++ , j -- . 

Nouveauté de C99

Il est possible de déclarer la variable de contrôle dans la partie initialisation de l'instruction for.

On reprend

Initialisation d’un tableau (revu en C99)

for (int i=0; i< 10 ; i++)

tableau [i] = 0 ;

La variable de contrôle a pour portée uniquement l'instruction for.

Et cette boucle qui cherche l'indice du premier caractère non blanc ne marche pas en C99.

/* Recherche de l'indice i du premier caractère non blanc */

for (int i = 0 ; s [i] == ' ' ; i++) ;

/* On ne sait plus jusqu'où on était allé */

/* Il faut rajouter une variable dernier_i*/

int dernier_i ;

for (int i = 0 ; s [i] == ' ' ; i++)

dernier_i=i ;

» Glossaire du langage C