Mais où est charlie?

Fermé
El roux - 20 oct. 2007 à 05:17
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 5 févr. 2008 à 20:36
Bonjour,

aide demander de programmeur c

voila...encore le même programme en un peu plus complexe...(ouuu...)
je ne comprend pas ou est l'erreur, c'est dans la fonction "comparer"

lorsque je fais marcher mon programme, peut importe quel valeur je rentre il m'affiche +(nombre pas assez grand..)
et losrque je dépase 10, il repete la fonction 2 fois sans prendre en compte mon "scanf", ce qui donne

guess? (nombre >=10)

+


+guess?


guess? (taper nouveau nombre...) et ce juska 99....100...et passé...apres avoir passé 8hrs sur ce petit bout de code anodin je ne trouve pas encore l'erreur alors svp aider moi sinon je croi que je vais commencer a exploser tout ce qui est dans mon champ de vision....

voici mon code...(p.s. si quelqun a des conseils a me donner aussi sa serait sympa...)

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

long comparer(long A ,long B)
{


do
{
printf("\nguess");

scanf("%1d", &B);

if (A > B)

printf("+\n\n");

else if (A < B)

printf("-\n\n");

else

printf("bravvoooo...\n\n");

} while (B != A);
return 0;

}

long players(long D)
{
printf ("Entrer le nombre de jouers (1, 2 )");
scanf ("%1d", &D);

return D ;
}



long generer(long A)
{
const long M = 100, N = 1 ;

srand(time(NULL)) ;
A = (rand() % (M - N + 1)) + N ;
return A;

}



long main(long argc, long *argv[])
{

long A = 0 , B = 0 , D =0, E = 0 ;

do
{

if (players(D) != 1)
{
printf("joueur 1 entrer le nombre");
scanf("%1d", &A);
}
else
{
printf("Generation d'un nombre aleatoire en cours...\n\n") ;
A = generer(A);

}

comparer(A, B);

printf("rejouer?\n 1=oui, 2=non");
scanf("%1d", &E);

}while (E = 1);


system("PAUSE");
return 0;
}

2 réponses

look
can hive got to se toilet please
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
5 févr. 2008 à 20:36
Bonjour,

Pour le coup de la répétition à partir de 10 c'est normal.

Ton scanf au début de comparer ne lit qu'un chiffre à la fois (%1d au lieu de %d) donc à partir de 10 il lira 1, comparera, puis, un 0 étant encore dans le buffer d'entrée, il lira ce 0 et refera un tour avant d'attendre une saisie de l'utilisateur.

Lors d'un
do
{
   scanf( "%d", &monInt );
} while ( monInt != 0 );

Si l'utilisateur entre à la première saisie '1 2 3 4 5 6 0' la boucle fera tous les tours comme si l'utilisateur avait rentré les nombres un par un avec des Enter entre chaque. Sauf qu'il n'y aura qu'une seule saisie.
Pour forcer cela et ne pas prendre en compte tout ce que l'utilisateur peut mettre derrière le premier nombre il faut vider le buffer d'entrée du programme avant le scanf avec un flush( stdin );

Je n'ai pas vraiment regardé le reste du programme mais je pense que juste un %d à la place du %1d peut expliquer les affichages multiples et le toujours "-". Le flush n'est pas obligatoire. (Bienque si l'utilisateur rentre "27 parce que je le vaux bien" cela peut avoir des comportements inattendus)

Accessoirement pour poster du code on peut mettre des balise < code> ... < /code>

Et point de vu conseil je dirais juste une chose certainement un peu futile ici mais bon : séparer la partie interface utilisateur (scanf, printf) du coeur du programme pour avoir par exemple une fonction de comparaison qui... compare, et rien d'autre.

M.
0