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] Erreur dans mon code (débutant). Boucle while..

[Vicki]
[Vicki]
Niveau 10
21 mars 2015 à 17:54:44

Bonjour,

j'essaye de coder ce programme (écrit avec la boucle do while) :
http://openclassrooms.com/courses/apprenez-a-programmer-en-c/tp-plus-ou-moins-votre-premier-jeu
( cf correction)

avec la boucle while uniquement, mais lorsque je compile seulement une partie du programme est exécuté, tout jusqu'à while(..).

voici mon code :



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ( int argc, char** argv )

{
    int nombreMystere = 0, nombreEntre = 0;
    const int MAX = 100, MIN = 1;

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

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

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

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

        else
            printf("Bravo, vous avez trouve le nombre mystere !!!\n\n");

    while(nombreEntre != nombreMystere);
    {
        printf("Quel est le nombre ? ");
        scanf("%d", &nombreEntre);

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

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

        else
            printf ("Bravo, vous avez trouve le nombre mystere !!!\n\n");
    }
    return 0;
}

Que faire ? merci d'avance :)

[Vicki]
[Vicki]
Niveau 10
21 mars 2015 à 18:46:05

+ j'ai un autre soucis, j'arrive vraiment pas à trouver la solution (dans le même programme mais amélioré)

dans ce programme, à la fin lorsque l'utilisateur tape autre chose que 0 ou 1, je n'arrive pas à faire une boucle ou quelque chose qui ferait que tant qu'il marque autre chose que 0 ou 1, le programme dise "Tapez autre chose que 0 ou 1" :(

voici le code :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main ( int argc, char** argv )
{
    int continuerPartie = 1, choix = 0;
    printf("Hello !\n");

    while(continuerPartie)
    {
        printf("Let's go !\n\n");

        int nombreMystere = 0, nombreEntre = 0,nb_coup = 0;
    const int MAX = 100, MIN = 1;

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

     do
    {

        printf("Quel est le nombre ? ");
        scanf("%d", &nombreEntre);
        nb_coup++;

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

    } while (nombreEntre != nombreMystere);

    printf ("Bravo, vous avez trouve le nombre mystere en %d coup(s) !!!\n\n\n", nb_coup);
    printf("Voulez-vous faire une nouvelle partie ? Tapez 1 si Oui ou 0 si Non.\n\n");

    scanf("%d", &choix);

    printf("\n\n");

    if(choix == 1)
        {
            continuerPartie = 1;
            printf("---------------------\n\n");
            printf("C'est reparti !\n");
        }
    else if(choix == 0)
            continuerPartie = 0;
    else
            printf("Tapez uniquement 0 ou 1\n\n");


    }

}

Merci :(

Pseudo supprimé
Pseudo supprimé 21 mars 2015 à 19:00:37

Tu le dis toi même tu fais une boucle while pour vérifier si l'entrée est bonne après avoir demander la saisie


while (choix != 1 || choix != 0)
    {
        //ton message
    }
if (choix == 1) 
    {
        //...
    }
else
    { 
        //...
    }
[Vicki]
[Vicki]
Niveau 10
21 mars 2015 à 19:17:36

du coup ça donne ça mais ça ne marche pas :( lorsque je rentre deux fois un nombre autre que 0 ou 1, ça plante :(

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main ( int argc, char** argv )
{
    int continuerPartie = 1, choix = 0;
    printf("Hello !\n");

    while(continuerPartie)
    {
        int MAX = 0, choixLevel = 0;
        printf("Let's go !\n\n");
        printf("Niveau 1, 2 ou 3 ? Tapez 1, 2 ou 3\n\n");
        scanf("%d", &choixLevel);
        printf("\n");

        switch(choixLevel)
        {
        case 1 :
            printf("Vous avez selectionne le niveau 1\n");
            MAX = 100;
            break;
        case 2 :
            printf("Vous avez selectionne le niveau 2\n");
            MAX = 1000;
            break;
        case 3 :
            printf("Vous avez selectionne le niveau 3\n");
            MAX = 10000;
            break;
        default :
            printf("Veuillez taper uniquement 1, 2 ou 3\n");
        }

    int nombreMystere = 0, nombreEntre = 0,nb_coup = 0;
    const int MIN = 1;


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

     do
    {
        printf("Quel est le nombre ? ");
        scanf("%d", &nombreEntre);
        nb_coup++;

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

    } while (nombreEntre != nombreMystere);

    printf("\n");
    printf ("Bravo, vous avez trouve le nombre mystere en %d coup(s) !!!\n\n\n", nb_coup);
    printf("Voulez-vous faire une nouvelle partie ? Tapez 1 si Oui ou 0 si Non.\n\n");

    scanf("%d", &choix);
    printf("\n");

    while(choix != 0 || choix != 1)
    {
        printf("Tapez uniquement 0 ou 1.\n\n");
        scanf("%d", choix);
        printf("\n");
    }

    printf("\n\n");

    if(choix == 1)
        {
            continuerPartie = 1;
            printf("---------------------\n\n");
            printf("C'est reparti !\n");
        }
    else if(choix == 0)
            continuerPartie = 0;

    }
}
rangerprice
rangerprice
Niveau 10
21 mars 2015 à 19:27:59

Utilise un debuguer pour avoir ou ça plante précisément

AZIR2015
AZIR2015
Niveau 7
21 mars 2015 à 19:43:58

en fait la boucle while s'execute que lorsque une condition est vrai. Et si on vois bien tu écris :

int nombreMystere= 0, nombreEntree = 0; Et selon ces deux valeurs affectés 0=0mbreMystere=NombreEntree donc le fait de dire nombreMystere != nombreEntree ça donne false. Donc la valeur de nombreMystere n'est pas egale à celle de nombreEntree pour qu'on entre dans la boucle, essaye un do while ça sera plus logique :)

Message édité le 21 mars 2015 à 19:45:17 par AZIR2015
AZIR2015
AZIR2015
Niveau 7
21 mars 2015 à 19:48:19

tu peux gérer la continuation avec des bools comme : if(choix) ou if(choix == true) comme ça sera plus accessible :ok:

[Vicki]
[Vicki]
Niveau 10
21 mars 2015 à 23:53:33
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ( int argc, char** argv )
{
    int continuerPartie = 1, choix = 0;
    printf("Hello !\n");

    while(continuerPartie)
    {
        int MAX = 0, choixLevel = 0;
        printf("Let's go !\n\n");
        printf("Niveau 1, 2 ou 3 ? Tapez 1, 2 ou 3\n\n");
        scanf("%d", &choixLevel);
        printf("\n");

        switch(choixLevel)
        {
        case 1 :
            printf("Vous avez selectionne le niveau 1\n");
            MAX = 100;
            break;
        case 2 :
            printf("Vous avez selectionne le niveau 2\n");
            MAX = 1000;
            break;
        case 3 :
            printf("Vous avez selectionne le niveau 3\n");
            MAX = 10000;
            break;
        default :
            printf("Veuillez taper uniquement 1, 2 ou 3\n");
        }

    int nombreMystere = 0, nombreEntre = 0,nb_coup = 0;
    const int MIN = 1;

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

     do
    {
        printf("Quel est le nombre ? ");
        scanf("%d", &nombreEntre);
        nb_coup++;

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

    } while (nombreEntre != nombreMystere);

    printf("\n");
    printf ("Bravo, vous avez trouve le nombre mystere en %d coup(s) !!!\n\n\n", nb_coup);
    printf("Voulez-vous faire une nouvelle partie ? Tapez 1 si Oui ou 0 si Non.\n\n");

    scanf("%d", &choix);
    printf("\n");

    do
    {
        printf("Tapez uniquement 0 ou 1.\n\n");
        scanf("%d", &choix);
        printf("\n");
    }while(choix != 0 || choix != 1);

    printf("\n\n");

    if(choix == 1)
        {
            continuerPartie = 1;
            printf("---------------------\n\n");
            printf("C'est reparti !\n");
        }
    else if(choix == 0)
            continuerPartie = 0;

    }
}

Donc j'ai mis une boucle do while comme tu m'as dit, mais ça marche toujours pas :( + Je comprends pas trop ce que tu dis là. Car j'ai même pas finis la 1ère partie du tuto sur Openclassroom, je suis au premier TP, donc je sais pas faire grand chose encore :(

Que faire ? :-)

Merci pour ton aide

AZIR2015
AZIR2015
Niveau 7
22 mars 2015 à 10:28:50

voilà un code que j'ai fait moi même analyse le. Pour la gestion des booléens, open classrooms traite ce sujet dans son cours :ok: http://pastebin.com/9znmkpis

[Vicki]
[Vicki]
Niveau 10
22 mars 2015 à 12:46:58

Merci encore AZIR2015, je vais essayer de me débrouiller avec ça mais par contre tu peux juste essayer de voir ce qui ne marche pas :( Test le code, le jeu ne marche pas vraiment, enfin je sais pas comment expliquer :(

Merci :)

AZIR2015
AZIR2015
Niveau 7
22 mars 2015 à 13:01:02

Mon code marche, j'ai bien testé tout les points.
Pour ton code je vais voir :)

[Vicki]
[Vicki]
Niveau 10
22 mars 2015 à 13:07:11

Je parlais du tiens justement, moi ça plante :(

[Vicki]
[Vicki]
Niveau 10
22 mars 2015 à 13:09:37

Voilà ce que ça donne avec le tiens, par exemple ici, même si je met 0, il me dit que "c'est moins" :(

https://image.noelshack.com/fichiers/2015/12/1427026167-bug.png

Et aussi autre problème, avec code blocks, je sais pas si ça te fais ça aussi mais souvent quand je compile et j’exécute, deux fenêtre s'ouvre au lieu d'une et ça plante à moiter, je sais pas si tu vois ce que je veux dire/si t'as déjà eu ça ? + et avast se met à analyser ce que je viens exécuter etc. Si tu pouvais m'aider pour ça aussi ça serais cool :-)

Message édité le 22 mars 2015 à 13:12:12 par [Vicki]
AZIR2015
AZIR2015
Niveau 7
22 mars 2015 à 13:11:36

:rire: apparement tu n'as pas compris le truc :rire:
en fait s'il te dit que 50 c'est moins, essaye un nombre plus grand que 50 :ok: s'il te dit que 50 c'est plus bah essaye un nombre plus petit que 50 :ok:

AZIR2015
AZIR2015
Niveau 7
22 mars 2015 à 13:14:24

j'utilise pas code blocks, j'utilise un editeur de texte + gcc pour compiler :ok:

[Vicki]
[Vicki]
Niveau 10
22 mars 2015 à 13:15:17

Ok merci beaucoup ! Là j'ai pas le temps mais je testerais ça dans le semaine !

AZIR2015
AZIR2015
Niveau 7
22 mars 2015 à 13:16:21

pas de problème :)

[Vicki]
[Vicki]
Niveau 10
22 mars 2015 à 13:18:30

Ah ok :hap: On s'est mal compris, quand je mettais c'est moins c'était dans le sens "Entre un nombre moins grand que celui que tu viens d'entrer".

:rire: ^^

AZIR2015
AZIR2015
Niveau 7
22 mars 2015 à 14:50:41

ah dans ce cas t'aurais pu écrire "ça doit être plus grand/petit" :hap:

flurk75
flurk75
Niveau 1
22 mars 2015 à 17:53:02

Bonjour, Bon j'ai regarder ton code teste ca si c'est bon, et si oui regarde les difference mais ton code peut etre amélioré grandement.

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

int main ( int argc, char** argv )
{
int continuerPartie = 1, choix = 0;
printf("Hello !\n");
int MAX = 0;
int choixLevel = 0;
while(continuerPartie)
{

printf("Let's go !\n\n");
printf("Niveau 1, 2 ou 3 ? Tapez 1, 2 ou 3\n\n");
scanf("%d", &choixLevel);

switch(choixLevel)
{
case 1 :
printf("Vous avez selectionne le niveau 1\n");
MAX = 100;
break;
case 2 :
printf("Vous avez selectionne le niveau 2\n");
MAX = 1000;
break;
case 3 :
printf("Vous avez selectionne le niveau 3\n");
MAX = 10000;
break;
default :
printf("Veuillez taper uniquement 1, 2 ou 3\n");
break;
}
// pour sortir du while quand l'utilisateur a bien tape le bn num
if(choixLevel==1)
break;
if(choixLevel==2)
break;
if(choixLevel==3)
break;
}
int nombreMystere = 0, nombreEntre = 0,nb_coup = 0;
const int MIN = 1;

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

do
{
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
nb_coup++;

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

} while (nombreEntre != nombreMystere);

printf("\n");
printf ("Bravo, vous avez trouve le nombre mystere en %d coup(s) !!!\n\n\n", nb_coup);
printf("Voulez-vous faire une nouvelle partie ? Tapez 1 si Oui ou 0 si Non.\n\n");

scanf("%d", &choix);
printf("\n");

do
{
printf("Tapez uniquement 0 ou 1.\n\n");
scanf("%d", &choix);
printf("\n");
}while(choix != 0 || choix != 1);

printf("\n\n");

if(choix == 1)
{
continuerPartie = 1;
printf("---------------------\n\n");
printf("C'est reparti !\n");
}
else if(choix == 0)
continuerPartie = 0;

}

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