CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(C) error : expected 'while' before 'do'

StairofdarknesS
StairofdarknesS
Niveau 10
05 novembre 2012 à 19:38:44

Bonjour à tous et à toutes.

Alors voilà, j'ai un petit problème avec un programme que je conçois en ce moment. Il s'agit en fait d'un mini-jeu qui tire un nombre au hasard et le joueur doit trouver celui-ci avec le moins d'essais possibles.

En essayant d'y ajouter une fonctionnalité multijoueur, et ayant à-priori corrigé tous les problèmes, il se trouve qu'il y en a un que j'ai du mal à résoudre.

Un problème à la ligne 59 qui mentionne " error : expected 'while' before 'do'". Pour ceux qui souhaiteraient lire mon programme, il se trouve ici :d)

:d) :d)

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <time.h>
  4. include <math.h>

int main()
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
int compteurCoups = 0;
int nombreDeJoueurs = 0;

printf("=Voulez vous jouer=\n\n 1. en solo \n\n 2. à deux personnes\n\n\n");
scanf("%d", &nombreDeJoueurs);

switch (nombreDeJoueurs)

{

case 1:

// Génération du nombre aléatoire

srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

do

{
// séléction du nombre...

printf("quel est le nombre mystere ?");
scanf("%d", &nombreEntre);

// Ajout d'un compteur de coups opérationnel.

compteurCoups ++;

if (nombreMystere > nombreEntre)
printf("c'est plus !\n");

else if (nombreMystere < nombreEntre)
printf("c'est moins !\n");

else
printf("bravo ! vous avez trouve le nombre mystere en %d coups.\n\n", compteurCoups);
break;

case 2:

printf("Joueur 1, choisissez et écrivez le nombre mystere entre 1 et 100");
scanf("%d", &nombreMystere);

}

do

{
// séléction du nombre...

printf("quel est le nombre mystere ?");
scanf("%d", &nombreEntre);

// Ajout d'un compteur de coups opérationnel.

compteurCoups ++;

if (nombreMystere > nombreEntre)
printf("c'est plus !\n");

else if (nombreMystere < nombreEntre)
printf("c'est moins !\n");

else
printf("bravo ! vous avez trouve le nombre mystere en %d coups.\n\n", compteurCoups);
break;

} while (nombreEntre != nombreMystere);

}

}

:g) :g)

Au cas où ces lignes ne seraient pas compréhensibles, j'ai pris une capture noelshack de l'endroit qui justement me pose problème. :d) https://image.noelshack.com/fichiers/2012/45/1352140631-problemeprog.jpg

Évidemment, vous pouvez zoomer. :-)))

Merci aux personnes qui auront l'amabilité de me répondre. :)

lokilok
lokilok
Niveau 16
05 novembre 2012 à 19:44:25

L'erreur est clair, il te manque un while avant le do de la ligne ou il y a l'erreur.

Pseudo supprimé
Pseudo supprimé 05 novembre 2012 à 19:45:20

Je pense qu'il te manque simplement un 'while' après ton premier 'do' :(

StairofdarknesS
StairofdarknesS
Niveau 10
05 novembre 2012 à 20:14:18

Je ne comprends pas pourquoi il faut mettre un while après le do, le deuxième problème est que quand je le rajoute, le debbuger signale une anomalie au niveau des crochets... :(

Merci pour vos réponses quand même :ok:

godrik
godrik
Niveau 30
05 novembre 2012 à 20:55:46

La construction est do{stuff();}while(cond)

ici tu as deux "do", mais un seul "while". Donc il ya evidement un probleme.

StairofdarknesS
StairofdarknesS
Niveau 10
06 novembre 2012 à 19:48:42

Merci pour vos réponses, mais je débute, qu'est-ce que je dois faire CONCRETEMENT ? :)

tbop2
tbop2
Niveau 10
06 novembre 2012 à 21:55:09

Euh.... Apprendre à lire ? :sarcastic

NPlay
NPlay
Niveau 12
07 novembre 2012 à 01:39:26

Ligne 56, il manque en effet un while(condition);

Mais j'ai l'impression que tu t'es complètement mélangé dans ton code. :( Ou alors c'est moi qui suis fatigué. :rouge:

Tu pourrais uploader ton code sous PasteBin stp, ou n'importe quel autre service du genre? :-p
Pour qu'il soit à la fois lisible et propre. :o))

Tikim
Tikim
Niveau 21
07 novembre 2012 à 15:13:35

Déjà c'est pas la peine de faire un switch pour seulement deux cas. Mais si tu veux garder le switch, alors fais gaffe. Tes case n'ont pas de []... Si tu as plusieurs lignes d'instructions il faut délimiter tes cases par des []. Quand bien même ça compilerait sans, les mettre permet de rendre le code plus clair.

Pareil pour les if/else if/else. Les instructions monolignes fonctionnent, mais autant mettre des [] autour, que ce soit plus clair (et ça te permettrait de rajouter facilement des lignes d'instruction sans risque d'oubli des []. Tant que ton code est lisible, tu dois t'en foutre de sa taille. Pour la réduire tu créeras plus tard des fonctions, mais ne sacrifie jamais la lisibilité du code au profit de sa taille. JAMAIS.

Pour ton problème du do... while, godrik t'as donné la réponse exacte. "do" signifie "exécute ces instructions délimitées par les []". Là ton erreur c'est que "do" attend, après, un "while();" qui lui dira quand il arrêtera d'exécuter ces instructions. Donc tu dois te poser la question suivante : Quand est-ce qu'il faut arrêter cette boucle d'instructions ?

La réponse étant : Quand le joueur aura la bonne réponse. Donc while(nombreMystere != nombreEntre);. Tu n'as donc qu'à ajouter ça après les [] du "do". Comme cela a été dit au-dessus :ok:

Le meilleur conseil qu'on puisse te donner ici est de ne pas vouloir aller trop vite dans ton apprentissage. C'est très bien de vouloir essayer, coder, etc. Mais si tu as des erreurs ou que tu ne comprends pas, reviens en arrière et vérifie tes connaissances, relis ton cours (qu'il s'agisse d'un cours en ligne, scolaire, etc). Parce que ça, c'était écrit noir sur blanc, et ce dans n'importe quel cours au chapitre des boucles.

StairofdarknesS
StairofdarknesS
Niveau 10
08 novembre 2012 à 14:43:20

Merci. :ok:

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment