Programme en C...aidez-moi à trouver l'erreur!
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Programme en C...aidez-moi à trouver l'erreur!



  1. #1
    invitedc330aab

    Unhappy Programme en C...aidez-moi à trouver l'erreur!


    ------

    Bonsoir à tous!

    Je débute en langage C je ne suis pas encore très à l'aise, donc je ne vous cache pas que j'ai mis un sacré bout de temps à écrire le code!!
    En plus de ça il y a une (ou des) erreurs que je n'arrive pas à corriger...lorsque je le lance, je me retrouve avec une boucle infinie!!! Mon pauvre ordi :s il en a subi plus d'une ce soir!!

    Voici le fameux code
    ______________________________ ______________________________ _____
    Code:
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(int argc, char *argv[])
    {
    	int niveau = 4;
    	int usernumber=1;
    	int Min=1;
    	int Max=10;
    
    	printf("Vous vous apprêtez à tester ce petit jeu :)\nIl consiste à deviner un chiffre choisi au hasard par l'ordinateur\net ceci en un minimum de coups!");
    	printf("Choisissez ci-dessous un niveau et tapez-en le numéro associé ci-contre :\n1. Facile : nombre mystère compris entre 1 et 10\n2. nombre mystère compris entre 1 et 100\n3. nombre mystère compris entre 1 et 200\n");
    
    	scanf("%d", &niveau);           //Choix du niveau dont le menu est affiché dans le 2e printf
    
    	do
    	{
    		switch(niveau)
    		{
    			case 1:
    				printf("Petit joueur!!! Tu as choisi de ne pas trop te mouiller en jouant avec le niveau 1!\n");
    				break;
    			case 2:
    				printf("Tu vas jouer en niveau moyen!! Pas mal :)\n");
    				Max=Max*10;
    				break;
    			case 3:
    				printf("Niveau difficile tu as choisi...niârkniârk j'espère que l'ordi, ton pire ennemi, va t'en faire baver!\n");
    				Max=Max*20;
    				break;
    			default:
    				printf("Tu n'as pas choisi un chiffre de la liste!!\nRetapes-en un stp...\n");
    				scanf("%d", &niveau);
    		}
    	}while(niveau !=1 && niveau !=2 && niveau !=3);  //GROS PROBLEME!!!! Je pense qu'il se trouve ici, car je me retrouve avec une boucle infinie! :(
    
    	srand(time(NULL)); //Initialisation du générateur de nombres aléatoires
    
    	int mysteriousnumber = 1;
    
    	mysteriousnumber = (rand()%(Max-Min+1))+Min;
    
    	printf("Quel est ce nombre?");
    	scanf("%d", &usernumber);
    
    	do
    	{
    		if(usernumber<mysteriousnumber)
    		{
    			printf("C'est plus!\nQuel est ce nombre?\n");
    			scanf("%d", &usernumber);
    		}
    		else if(usernumber==mysteriousnumber)
    		{
    			printf("C'est moins!\nQuel est ce nombre?\n");
    			scanf("%d", &usernumber);
    		}
    		else
    		{
    			printf("Bien joué!! Tu as remporté le défi que t'a lancé cet ordi! Joli!!!!! ;)");
    		}
    	}while(usernumber!=mysteriousnumber);
    
    	return 0;
    }
    ______________________________ ______________________________ ____

    J'espère que quelqu'un d'entre vous aura la patience de chercher mon erreur!
    Merci d'avance,
    titi9

    -----
    Dernière modification par yoda1234 ; 27/09/2010 à 06h15.

  2. #2
    yoda1234

    Re : Programme en C...aidez-moi à trouver l'erreur!

    Bonjour,

    tu devrais utiliser les différentes balises à ta disposition dans l'éditeur avancé de texte, en particulier la balise "Code" symbolisée par .
    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

  3. #3
    invite3b5f5a07

    Re : Programme en C...aidez-moi à trouver l'erreur!

    Salut,
    j'ai quelques vieux souvenirs de C++ qui me disent que ton erreur se trouve dans ta condition posée dans ton while...
    Si j'ai bien compris, tu veux sortir de ta boucle après que l'utilisateur ait choisi un niveau (1, 2 ou 3).
    Or si j'ai bien suivi, tu l'empêches de sortir de ta boucle. Admettons que je choisisse 1, ton while me renvoie à ton switch parce que 1 ne satisfait pas : (niveau !=1 && niveau !=2 && niveau !=3)
    Tu devrais choisir : (niveau == 1 || niveau == 2 || niveau == 3)

    A ++

  4. #4
    invite895675d5

    Re : Programme en C...aidez-moi à trouver l'erreur!

    @titi9

    Non ton code est bon. Chez moi ça fonctionne (pas de boucle infinie).
    Tu n'aurais pas taper autre chose que des chiffres par hasard ? Car dans ce cas, tu entres bien dans une boucle infinie.

    Citation Envoyé par Gordak Voir le message
    Tu devrais choisir : (niveau == 1 || niveau == 2 || niveau == 3)
    non, la bonne (autre) condition c'est
    while(!(niveau ==1 || niveau ==2 || niveau ==3))

    P.S. tu as deux bugs dans ton programme :
    - Ta boucle de recherche du bon nombre ne fonctionne pas.
    (Là ce n'est pas grand chose)
    - Essaie de rentrer un mauvais chiffre pour le niveau de difficulté puis un bon. Tu as un problème, dans ce cas, avec les niveaux de difficultés 2 et 3.
    Je te laisse chercher les solutions.

  5. A voir en vidéo sur Futura
  6. #5
    invitedc330aab

    Re : Programme en C...aidez-moi à trouver l'erreur!

    Merci pour vos réponses!
    J'ai finalement trouvé la grosse erreur...c'est qu'il manquait le break de la fin du switch!!

    A+
    titi9

  7. #6
    Jack
    Modérateur

    Re : Programme en C...aidez-moi à trouver l'erreur!

    Je ne vois pas trop ce qu'un break à la fin d'un switch peut apporter vu que dans tous les cas on sort du switch.

    A+

  8. #7
    invite2d7144a7

    Re : Programme en C...aidez-moi à trouver l'erreur!

    Bonjour,
    Citation Envoyé par Jack Voir le message
    Je ne vois pas trop ce qu'un break à la fin d'un switch peut apporter vu que dans tous les cas on sort du switch.

    A+
    Absolument d'accord.

  9. #8
    invitecb2428ec

    Re : Programme en C...aidez-moi à trouver l'erreur!

    Code:
    do
        {
            if(usernumber<mysteriousnumber)
            {
                printf("C'est plus!\nQuel est ce nombre?\n");
                scanf("%d", &usernumber);
            }
            else if(usernumber==mysteriousnumber) //replacer par usernumber>mysteriousnumber
            {
                printf("C'est moins!\nQuel est ce nombre?\n");
                scanf("%d", &usernumber);
            }
            else
            {
                printf("Bien joué!! Tu as remporté le défi que t'a lancé cet ordi! Joli!!!!! ;)");
            }
        }while(usernumber!=mysteriousnumber);
    Si l'utilisateur entre usernumber>mysteriousnumber le prgme va présenter un boucle infini.

  10. #9
    Jack
    Modérateur

    Re : Programme en C...aidez-moi à trouver l'erreur!

    Code:
    else if(usernumber==mysteriousnumber) //replacer par usernumber>mysteriousnumber
    On se demande pourquoi le remplacement n'est pas fait.

    Si l'utilisateur entre usernumber>mysteriousnumber le prgme va présenter un boucle infini.
    Du coup, si le remplacement est fait, ce n'est pas sur. En tout cas les scanf sont bizarrement placés.

    A+

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/11/2008, 19h39
  2. aidez moi a trouver la solution vite...
    Par invite8a2070a6 dans le forum Chimie
    Réponses: 1
    Dernier message: 13/10/2008, 11h55
  3. Trouver l'erreur dans mon programme en BASIC:s
    Par invite935a281a dans le forum Électronique
    Réponses: 4
    Dernier message: 12/04/2008, 11h03
  4. Aidez moi de trouver mon document
    Par invite319722b5 dans le forum Chimie
    Réponses: 3
    Dernier message: 31/05/2007, 15h38
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...