Do while avec une instruction differente à la 1ère iteration
RésoluAissata -
Bonjour.
Je suis entrain de faire un petit programme en c++, qui va faire la validation de la saisie d'un utilisateur. On demandera à l'utilisateur de saisir une valeur, et un message d'erreur s'affichera tant que l'utilisateur ne rentre pas une valeur valide.
J'utilise le while actuellement, puisque le message du depart sera different des messages d'erreur. Mais je me demandais si avec le do while on pouvait faire en sorte d'afficher un message different pour la premiere iteration et un autre message pour les autres iterations.
Est-ce que cela est possible ? Ou je dois coûte que coûte utiliser un while dans mon cas.
3 réponses
-
Il y a plus d'une façon de le faire avec une boucle while ou do...while
L'idée est en général d'avoir une variable booléenne qui change de valeur après la lecture ou la validation.
bool bad = false;
do {
...
bad = valeur < 1 || valeur > 5;
} while(bad); -
Bonjour
le plus simple et le plus optimisé est d'afficher le premier message avant le while
int nombre = 0; printf("Veuillez saisir un nombre entre 1 et 100"); //premier message while(true)// la boucle est infinie => instruction 1 { nombre = scanf("%d"); // saisie du nombre => instruction 2 if (nombre > 1 && nombre < 101) // test de la valeur => instruction 3 break; // plus d'itération ne compte pas dans les instructions qui sont répétées printf("Le nombre doit etre compris entre 1 et 100"); //message d'erreur => instruction 4 }On voit qu'il y a quatre instructions pour chaque boucle avec saisie incorrecte.
Mais on peut faire comme tu le demandes de plusieurs façons, par exemple
int nombre = 0; char* message = "Veuillez saisir un nombre entre 1 et 100"; //premier message do// la boucle => instruction 1 { printf(message); //affichage du message 2 nombre = scanf("%d"); // saisie du nombre => instruction 3 message = "Le nombre doit etre compris entre 1 et 100"; //nouveau message => instruction 4 }while(nombre > 1 && nombre < 101) //test de la valeur => instruction 5Là, il y a 5 instructions répétées à chaque itération, dont une affectation de variable (ce qui implique une allocation de mémoire, donc du temps et des ressources)
On peut éviter l'allocation de mémoire à chaque fois, comme ça par exemple
int nombre = 0; char* message = "Veuillez saisir un nombre entre 1 et 100"; //premier message do// la boucle => instruction 1 { printf(message); //affichage du message 2 nombre = scanf("%d"); // saisie du nombre => instruction 3 if(message == "Veuillez saisir un nombre entre 1 et 100") => instruction 4 message = "Le nombre doit etre compris entre 1 et 100"; //nouveau message => n'est fait qu'une fois, donc ne compte pas dans les instructions répétées à chaque itération }while(nombre > 1 && nombre < 101) //test de la valeur => instruction 5C'est mieux, mais il y a quand même 5 instructions.
On pourrait aussi utiliser un tableau dont chaque item est un message et basculer une variable indice de 0 à 1 pour afficher le bon, mais on aurait encore 5 instructions.
-
Merci à tous pour vos réponse !
Oui. En effet je travaillais avec le while, en affichant d'abord le premier message hors de la boucle.
Et oui, vos réponses répondent bien à mon questionnement.
Merci encore !