Do.. while || while ?

Résolu/Fermé
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 - Modifié par MickaToast le 23/07/2015 à 19:18
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 - 23 juil. 2015 à 21:08
Bonjour, j'apprend le C en ce moment et je me suis demandé c'était quoi le mieux dans mon programme? Une boucle do.. while ou alors une boucle while?

int nombreChoisi, nombreMystere, tentative, jeu;

srand(time(NULL)); //Init de la fonction rand
do
{
 nombreMystere = (rand() % 99) + 1;
 tentative = 0;
 do
 {
  do
  {
   printf("Votre estimation entre 1 et 100: ");
   scanf("%d", &nombreChoisi);
  } while(nombreChoisi <= 0 || nombreChoisi >= 100); //Sécurité du scanf
  if(nombreChoisi < nombreMystere)
   printf("C'est plus!\n\n");
  else if(nombreChoisi > nombreMystere)
   printf("C'est moins!\n\n");
  tentative++;
 } while(nombreChoisi != nombreMystere); //Execution tant que le nombre n'est pas le bon (do car nombreChoisi par initialisé)
 printf("Bravo, vous avez gagné en %d tentatives!\n", tentative);
 do
 {
  printf("Aimeriez vous rejouer? (Oui=1 ; Non=0): ");
  scanf("%d", &jeu);
 } while(jeu != 0 && jeu != 1); //Sécurité du scanf
} while(jeu);

return 0;


En gros je sais faire les deux boucles, mais le do.. while me permet de pas initialiser une valeur aux variables (au début du code (int ..))

Merci d'avance pour vos réponses!

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
23 juil. 2015 à 20:03
Bonjour,

Dans ton cas d'utilisation, ces boucles do/while semblent bien utilisés.

De manière générale, ces deux systèmes de boucles sont de toute façon interchangeables.

do {
    instructions
}
while (condition);
instructions;

while (condition) {
    instructions;
}

Et :

while (condition) {
    instructions;
}
if (condition) {

    do {
        instructions;
    }
    while (condition);
}

Remarque : ton code pourrait se simplifier en créant une fonction.

int readInt(char* msg, int min, int max) {
    int tmp;
    /*if (min>max) {
        tmp = min;
        min = max;
        max = tmp;
    }*/
    do {
        printf(msg);
        scanf("%d", &tmp);
    } while(tmp < min || tmp > max);
    return tmp;
}

Ce qui donnerait :

nombreChoisi = readInt("Votre estimation entre 1 et 100: ", 1, 100);
jeu = readInt("Aimeriez vous rejouer? (Oui=1 ; Non=0): ", 0, 1);
1
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 24
23 juil. 2015 à 21:08
Merci pour ta réponse, et merci pour l'astuce de la fonction :)
0