Besoin d'avis et aide pour code
Fermé
thybault
Messages postés
2
Date d'inscription
mercredi 17 janvier 2018
Statut
Membre
Dernière intervention
18 janvier 2018
-
17 janv. 2018 à 15:19
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 18 janv. 2018 à 13:55
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 18 janv. 2018 à 13:55
A voir également:
- Besoin d'avis et aide pour code
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
1 réponse
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 17 janv. 2018 à 15:59
Modifié le 17 janv. 2018 à 15:59
Salut thybault,
Tu ne peux pas en C standard stopper l'exécution du programme en attendant la pression d'une touche quelconque.
Par contre, tu peux demander à l'utilisateur de presser "Entrée" en utilisant la fonction standard getchar().
Un moyen de faire simple, en supposant que l'utilisateur soit bien discipliné et tape bien seulement un nombre entier positif, le scanf va récupérer l'entier attendu, et il restera dans le flux le retour à la ligne tapé par l'utilisateur.
Ainsi :
C'est, comme je l'ai dit, une solution simple fonctionnant dans un monde idéal où l'utilisateur est discipliné et comprend et fait ce qu'on lui dit de faire.
Sinon, il faudrait notamment : vérifier que la valeur de retour de scanf() comprend bien 1, si le flux stdin contient autre chose que le retour à la ligne avertir l'utilisateur que le reste sera ignoré ou quitter avec une erreur, vérifier que la saisie est non nulle et renvoyer une erreur si l'utilisateur a saisi 0 ou quitter, vider le flux stdin si on poursuit,...
Dal
Tu ne peux pas en C standard stopper l'exécution du programme en attendant la pression d'une touche quelconque.
Par contre, tu peux demander à l'utilisateur de presser "Entrée" en utilisant la fonction standard getchar().
Un moyen de faire simple, en supposant que l'utilisateur soit bien discipliné et tape bien seulement un nombre entier positif, le scanf va récupérer l'entier attendu, et il restera dans le flux le retour à la ligne tapé par l'utilisateur.
Ainsi :
- pour consommer ce retour il faut un premier
getchar()
, qui prendra le retour à la ligne déjà tapé à la suite du chiffre. A ce stade, stdin devrait être vide. - pour stopper l'exécution en attendant la pression de la touche "Entrée", il faudra alors un deuxième
getchar()
scanf("%d", &nombredejoueur); printf("Appuyer sur la touche Entrée pour lancer les dés...\n"); getchar(); /* on consomme le retour à la ligne */ getchar(); /* on attend la pression de Entrée */
C'est, comme je l'ai dit, une solution simple fonctionnant dans un monde idéal où l'utilisateur est discipliné et comprend et fait ce qu'on lui dit de faire.
Sinon, il faudrait notamment : vérifier que la valeur de retour de scanf() comprend bien 1, si le flux stdin contient autre chose que le retour à la ligne avertir l'utilisateur que le reste sera ignoré ou quitter avec une erreur, vérifier que la saisie est non nulle et renvoyer une erreur si l'utilisateur a saisi 0 ou quitter, vider le flux stdin si on poursuit,...
Dal
17 janv. 2018 à 16:06
18 janv. 2018 à 06:28
Merci de votre réponse bonne journée
Modifié le 18 janv. 2018 à 14:01
Non, à chaque lancer tu lances 5 dés au plus, pas 6.
Selon l'énoncé, il peut y avoir 1, 2 ou 3 (mais pas plus) lancer(s) par joueur selon le résultat de chaque lancer. Par ailleurs, tu observeras qu'on ne lance pas non plus le même nombre de dés selon le résultat des lancers précédents, les dés donnant des résultats requis dans l'ordre requis n'étant pas lancés de nouveau.
Tu dois inclure toute cette logique dans ton programme en décomposant ton problème en sous problèmes plus simples.
Prend un papier et un crayon, et identifie les cas à traiter, et pour chaque cas, les opérations élémentaires à mettre en oeuvre, et ensuite construit ton programme.
Tu dois aussi mettre tout cela dans une boucle répétant ces opérations pour les n joueurs.
Voilà quelques pistes :
Pour simplifier ton code, il te faudra certainement créer des fonctions pour :
Tu mettrais l'appel à ces deux fonctions dans une boucle permettant au plus 3 lancers et stoppant si le stade où tu te trouves ne nécessite plus de lancers selon l'interprétation des résultats précédents
Après être sortit de cette boucle, tu calcules le score
Et tu mets tout cela dans une boucle répétant les opérations précédentes pour tous les autres joueurs.
Dal