Aider un débutant en c?

El roux -  
SmallFitz Messages postés 358 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

comme le titre l'indique je débute en programmation c et j'aimerais avoir un avis d'xpert sur un petit probleme qui a gobber jusque la 5 heures de ma vie...(he oui...je n'ai rien contre prendre du temps a programmer et trouver les problemes mais la une erreur conne comme celle la...)

alors mise en situation fini, j'ai fait un programme qui est supposer calculer un nombre mystere, et par la suite, a l'aide d'indices, on essaye de trouver se nombre compris entre 0 et 100. cela donne grosso modo

guess? (nombre)
+
guess? (nombre +++++)
-
guess?(nombre)
bravo tu a trouver le nombre mystere!!

mais voila ce que mon programme fais lors de la comparaison de variable

pour un nombre plus grand que 10 il affichera

+guess+guess? (entrer nombre)
pour un nombreinférieur a 10
+guess?

mais immanquablement, jamais je ne toucherais la valeur moin...meême si mon nombre est plus haut que le nombre mystere.

j'ai essayer d'afficher mes nombres pendant que le programme tourne et cela donne quelque chose dans le genre
(A = nbr mystere, B = nombre rentré)

A= 75
B=32

alors voila le résultat et c'Est cette partie que je ne comprend pas!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

guess?(j'entre B)
+,3guess +,2guess?(entrer un nouveau nombre B)
je ne l'illuste p-e pas comme il le faut mais le principe est la...il coupe mon 32 et compare le 3 et le 2 individuellement...du moin c'Est ce que j'en déduis....avec mon intelligeance supérieur.....(hum..)

bref, voila mon code source
(si vous avez des amélioration a suggerer ne vous gené pas ^^)
(j'ai quelque fonction de plus, mais celle qui m'interesse est comparer)

#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;
}

4 réponses

tatou_38 Messages postés 1954 Date d'inscription   Statut Membre Dernière intervention   121
 
Bonjour,

quand tu essaies d'acquerir une valeur entière par scanf(), il faut utiliser le fon format !!

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

%1d = variable de type int, valeur sur 1 chiffre, donc saisie d'un nombre de 0 à 9 !!!!

essaies avec le format %d, cela marchera à tous les coups !

Sinon ton programme est améliorable, je te le confirme !
0
El roux
 
mercimercimercimerci!!!!!!!!!!!!!!!!!!!!

3hrs a gosser sur cette patente a gosse arrgggh!

merci!
0
c-moi Messages postés 82 Statut Membre 10
 
Bonjour,

}while (E = 1); 


J'espère que c'est une erreur de frappe, dans le cas où tu as recopié ton code ^^
Sinon, n'oublie pas de compiler avec les options de Warning (-Wall sous gcc).
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

ce n'est pas == ?
0
c-moi Messages postés 82 Statut Membre 10 > lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
indeed
0
SmallFitz Messages postés 358 Date d'inscription   Statut Membre Dernière intervention   189
 
Salut !
Des commentaires sur ton code ?
Ho oui plein !

1)INDENTATION !
2)Donne des noms clair à tes variables, on y comprend rien !
3)Faire un return 0; à ta fonction long comparer () est completement inutile. Elle doit donc être de type void.
4)srand(time(NULL)) ; ne doit être appelé qu'une fois et qu 'UNE SEULE FOIS.
5)Ton main ne doit pas être de type long mais int.
6)system("PAUSE"); n'est pas portable, utilise plutôt getchar();
7)Dans ton main tu déclare des long. Donc ensuite tu dois mettre dans tes scanf ceci : %ld
8) do{}while (E = 1); est une boucle infinie ! En effet c'est E == 1

Le jeu que tu as fais est un Plus Ou Moins. Tu peux aller là pour un complément d'information.
https://openclassrooms.com/forum/sujet/aide-plus-ou-moins-pas-a-pas-49992
Pour toutes tes erreurs je te conseille de relire un cour, celui là par exemple.
https://openclassrooms.com/fr/courses
0