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

[help]Mon jeu codé en C, ou est le bug?

mxn
mxn
Niveau 3
05 février 2010 à 19:39:43

Salut à tous,

j'ai codé en C un petit jeu (du plus ou moins) en console,avec une proposition de recommencer le jeu une fois une partie finie et avec choix de niveaux. Le problème est que j'ai une boucle infinie, et je n'arrive pas à trouver à cause de quoi :s ....

cette boucle commence après avoir entré une première proposition pour le nombre mystère
(je l'ai deja fait en plusieurs fonctions, mais je voulais tester de le faire seulement dans la fonction main pour des raisons trop compliquées à vous expliquer)

Voici le code source (en C) :

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

// realisation du jeu plus ou moins uniquement dans la fonction main

int main()
{
// Initialisation des Variables et constantes
int nombreEntre = 0;
int nombreMystere = 0;
int compteur = 0;
int niveau = 0;
int max = 3;
int continuerPartie = 1;
const int MIN = 1;
// Fin de l'initialisation des Variables et constantes

// Menu principal
do
{
printf("\n==== JEU DU PLUS OU MOINS ====");
printf("\n============ MENU ============\n\n");
printf(" 1. Commencer une nouvelle partie\n");
printf(" 0. Quitter le jeu\n\n");
printf("Que voulez-vous faire ? : \n");
scanf("%d", &continuerPartie);

// Choix des niveaux
printf("\n ~~~~ MENU : SELECTION DE NIVEAU ~~~~\n\n");
printf(" 1. Le nombre mystere se trouve entre 1 et 10\n");
printf(" 2. Le nombre mystere se trouve entre 1 et 100\n");
printf(" 3. Le nombre mystere se trouve entre 1 et 1000\n");
printf("\nQuel est votre choix : ");
scanf("%d", &niveau);

switch(niveau)
{
case 1:
max = 10;
break;
case 2:
max = 100;
break;
case 3:
max = 1000;
break;
default:
printf("\nTu as voulu faire planter mon programme ...");
printf("\nPunition : le nombre mystere se trouve entre 1 et 1.000.000 ^^");
printf("\nBonne Merde ...");
max = 1000000;
break;
}

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

// Jeu même
printf("Quel est le nombre ? : ");
scanf("%d", &nombreEntre);

do
{
compteur++;
if (nombreMystere > nombreEntre)
printf("\nC'est plus !\n");
else if (nombreMystere < nombreEntre)
printf("\nC'est moins !\n");
else
{
if (compteur == 1)
printf("\nINCROYABLE, vous avez trouve le nombre mystere en 1 seul coup ! It is UNBELIEVABLE\n\n");
else
printf("\nBravo, vous avez trouve le nombre mystere en %d fois\n", compteur);
}

} while(nombreMystere != nombreEntre);
} while (continuerPartie == 1);

system("PAUSE");
return 0;
}

Si quelqu'un pouvait m'aider, ca serait sympa de sa part
:merci: d'avance

mxn
mxn
Niveau 3
05 février 2010 à 20:19:58

:up:

mxn
mxn
Niveau 3
05 février 2010 à 23:44:40

Non pas du tout, les variables doivent être déclarée au minimum juste avant leur emploi, ici je préfère les déclarée toutes au dessus du code :ok:
Afin de pouvoir faire aller le "programme", on est obliger d'initier toutes les variables.
Leur initiation permet d'éviter tout problème ou cas ou, dans la mémoire vive, il y a déjà une valeur associée à une ou plusieurs des variables de mon prgm.

Donc j'ai initialiser toutes mes varibales,
Lors du prgm une valeur est assignée à toutes les variables (et varient tout au long du prgm) hormis le : const int MIN = 1; qui est une constante et ne variera pas durant l'exécution du prgm (on la reconnait par son nom en majuscule)

Pour la variable nombreEntre, je l'initialise au début, mais je lui assigne la valeur que le joueur entrera dans la commande par un scanf("%d", &nombreEntre);

[La-Salade]
[La-Salade]
Niveau 10
05 février 2010 à 23:51:14

site du zero? je l'ai fait aussi ce jeu :o))
Pour utiliser la ligne qui permet de générer un nombre aléatoire
srand(time(NULL));
max = (rand() % (max - MIN + 1)) + MIN;
je croit que tu doit inclure une librairie dans les directives de préprocesseur, time.h si je me souvient bien :(

N4k1m
N4k1m
Niveau 6
06 février 2010 à 01:28:22

oui effectivement, tu as oublié cette librairie :ok: mais cela marche aussi sans ;) Car le debuggeur aurait trouvé une erreur (donc aurait empêcher la compilation), et le programme ne s'exécuterait pas jusqu'à l'endroit ou l'on te demande d'entre un nombre :ok:

Mais j'ai trouvé le problème : la boucle

do
{
........
} while(nombreMystere != nombreEntre);

ne contient pas le :

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

donc cela se répétait indéfiniment lors tu avais entré une valeur pour nombreEntre :ok:

ET une faute de plus due à la distraction, UNE !
_______________________________________

Appelé moi Nakim :-d
IDPSN : N4k1m

N4k1m
N4k1m
Niveau 6
06 février 2010 à 01:54:46

désolé du double post

Quelques petits conseils :

- c'est très rare qu'un informaticien code un programme (peu importe le langage) uniquement dans la fonction principale, pour des raisons de clarté et de compréhension du code ... je te conseil de séparer ton programme en plusieurs fonctions, qu'il te suffira d'appeler dans ta fonction principale.

- N'oublie pas de commenter ton texte, tu sais ce que fait ton code, comment il fonctionne (du peu qu'il marche), etc ... mais lorsque quelqu'un doit te corriger, il ne doit pas chercher trop longtemps comment ton code fonctionne. C'est pour cela qu'on vous demande de mettre des commentaires ! De plus, en mettant ton commentaire, il se pourrait que tu te rendes compte que finalement, le bout de code commenté ne fait pas exactement ce que tu à mis :ok:

- je ne sais pas si c'est à cause d'un copier - coller de ton code, mais fait attention à ton indentation !!! Une indentation correcte te permet de bien voir comment tel bout de code agit en fonction de tel boucle.

/!\ LES INDENTATIONS SE FONT AVEC DES ESPACES, LE "TAB" EST À BANNIR /!\
Car je sais que des compilateurs genre GCC ne prennent pas en compte les TAB de la même manière que d'autres compilateurs ! Donc si quelqu'un d'autre est amené à compiler un jour un de tes codes, il se peut qu'il ait des erreurs qui lui empêcherait la compilation

- Évite de mettre plus de 80 caractères sur une ligne de code, afin que ton code reste le plus lisible possible.

- Familiarises toi avec l'anglais ! et commences tout doucement à coder en Anglais (variables, textes affichés, commentaires etc ... )

Si tu as d'autres questions, hésites pas :ok:
________________________________________

Appelé moi Nakim :-d
IDPSN : N4k1m

mxn
mxn
Niveau 3
06 février 2010 à 09:15:07

:merci: bien Nakim :-d ça marche maintenant

merci aussi pour les conseils, je vais essayer de faire avec ;)

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