L'éternité, c'est long, surtout vers la fin.
Considérons le programme suivant :
void main() /* eternite 1 */
{
int a, i;
i = 1;
a = 0;
while (i < 100)
a = a + i;
}
Ce programme a peu de chance de se terminer sans aide extérieure, car le
test i < 100 sera toujours vérifié. En effet, la valeur
de la variable i n'est pas modifiée dans la boucle.
C'est également le cas dans cette variante :
void main() /* eternite 2 */
{
int a, i;
i = 1;
a = 0;
while (i < 100)
a = a + i;
i = i + 1;
}
Le programmeur a cette fois oublié d'inclure l'incrémentation de i
dans l'instruction while au moyen d'un bloc {...}.
On déjà vu également des choses du style :
void main() /* eternite 3 */
{
int i;
i = 1;
while ((i < 100) || (i > 0))
i = i + 1;
}
Le problème vient ici d'une erreur dans la formulation du test, dans cet exemple, le résultat sera toujours vrai.
Une dernière variante, pour la route :
void main() /* eternite 4 */
{
int i;
i = 1;
while (i < 100);
i = i + 1;
}
Exercice : trouvez l'erreur.