Do while avec une instruction differente à la 1ère iteration
Résolu/Fermé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.
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ?
- Trousseau mot de passe iphone - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Mot de passe - Guide
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);
Modifié le 27 nov. 2022 à 10:41
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 5
Là, 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 5
C'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.