Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/02/2013, 12h33   #1
mambodiandra
Invité de passage
 
Femme Diandra
Étudiant
Inscription : février 2013
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Diandra
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2013
Messages : 3
Points : 0
Points : 0
Par défaut Afficher tableaux avec des saisies faite par l'utilisateur

Bonjour, j'ai fait un programme en langage C du jeu de devin, le but étant de deviner un nombre entre un nombre minimal (0) et un nombre maximal (choisit par l'utilisateur) et de dire si le nombre est plus grand ou plus petit à chaque fois, il marche correctement quand je l'exécute, le seul problème est que je souhaite enregistrer chaque nouvelle saisie de l'utilisateur dans une case d'un tableau puis afficher ce tableau. Je déclare donc un tableau mais lors de l'affichage toutes les cases du tableau ont le même nombre ou chiffre.

Voici mon programme :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int trouver_nombre(int n);
 
void bienvenue()
{
 
     int choix;
     int n;
     printf("\n             Voulez vous continuer ? (1 pour oui et 0 pour non) \n \n");
     scanf("%d",&choix);
 
 
     while ((choix!=0)&&(choix!=1))
     {
       printf("\n Veuillez recommencer votre saisit : \n \n");
       scanf("%d",&choix);
     }
 
     if(choix==1)
     {
       printf("\n Veuillez entrer le nombre maximal : \n \n");
       scanf("%d",&n);
       trouver_nombre(n);
      }
 
     if(choix==0)
     {
       printf("\n                                   Dommage ... \n \n");
       getchar();
     }     
}
int trouver_nombre(int n)
{
    int n1,n2;
    printf("\n Veuillez entrer le nombre de votre choix : \n \n");
    scanf("%d",&n2);
    n1=rand()%n;
 
    int tableau[10]={0},i;
 
    while (n1!=n2)
    {
      for(i=0;i<10;i++)
      {
        tableau[i]=n2;        
      }  
 
      if (n1>n2)
      {
             printf("\n C'est plus grand ! \n");
             printf("\n Veuillez entrer le nombre de votre choix : \n \n");
             scanf("%d",&n2);
      }
      if (n1<n2)
      {
             printf("\n C'est plus petit ! \n");
             printf("\n Veuillez entrer le nombre de votre choix : \n \n");
             scanf("%d",&n2);
      }
      if (n1==n2)
      {
             printf("\n VOUS AVEZ TROUVE LE BON CHIFFRE !! \n \n");
      }      
    } 
 
    printf("\n Voici vos dernires saisies : \n \n");
 
    printf("%d %d %d %d %d %d %d %d %d %d \n",tableau[0],tableau[1],tableau[2],tableau[3],tableau[4],tableau[5],tableau[6],tableau[7],tableau[8],tableau[9]);
 
}
 
 
 
int main(void)
{
    printf("\n \n                      BIENVENUE DANS LE JEU DU DEVIN !! \n \n");
    srand(time(NULL));
    int duree;
    printf("\n \n       Difficulte ! En combien de secondes souhaiter vous essayer de gagner ? \n");
    scanf("%d",&duree);
    time_t start = time(NULL);
    bienvenue();
    getchar ();
    printf("\n Duree = %d secondes \n \n",(int) (time(NULL) - start));
 
    if((time(NULL) - start)>duree)
    {
             printf("\n Vous avez quand meme depasse le temps qui etait de %ds ! \n \n",duree);
    }           
 
 
    system("PAUSE");
    return 0;
}
PS= Mon programme est long j'aurai pu le raccourcir mais je suis assez novice en programmation.
mambodiandra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2013, 13h25   #2
leternel
Expert Confirmé
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 220
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 1 220
Points : 2 596
Points : 2 596
Bonjour à toi.

Tu autorise de faire autant de tentative que voulu, mais tu as un tableau de taille 10, ça ne peut pas marcher.
Il faut soit interdire de faire plus de N tentatives, soit utiliser une liste chainée.

J'ai de plus quelques conseils pratiques à te donner.

préfère getc() à scanf() quand tu le peux.

change ta fonction bienvenue pour qu'elle retourne le choix de l'utilisateur.
elle remplira une seule fonction: obtenir cette information.
ton main pourra alors utiliser la valeur de retour.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* retourne 0 si abandon, autre chose sinon. */
int bienvenue()
{
	char choix;
	printf("Voulez vous continuer ? (1 pour oui et 0 pour non) ");
   	choix = getc();
	while ( choix!='0' && choix!='1' )
	{
		printf("\n0 ou 1: ");
		choix = getc();
	}
	return (choix == '1') ? 1 : 0;
}
 
 
int main()
{
	/*...*/
	while (bienvenue()) {
		/* jouer */
	}
	printf("au revoir\n");
	return 0;
}
pour afficher un tableau, mieux vaut une boucle:
Code :
for(int i=0;i<TAILLE;++i) printf("%3d ", tableau[i]);
A présent, quelles sont tes questions?
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/02/2013, 14h14   #3
pythéas
Membre éclairé
 
Inscription : août 2007
Messages : 174
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 174
Points : 393
Points : 393
Bonjour,

Si tu veux mémoriser les saisies de l'utilisateur la boucle suivante pose problème :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
while (n1!=n2)
{
for(i=0;i<10;i++)
{
tableau[i]=n2;
}
 
if (n1>n2)
{
printf("\n C'est plus grand ! \n");
printf("\n Veuillez entrer le nombre de votre choix : \n \n");
scanf("%d",&n2);
}
if (n1<n2)
{
printf("\n C'est plus petit ! \n");
printf("\n Veuillez entrer le nombre de votre choix : \n \n");
scanf("%d",&n2);
}
if (n1==n2)
{
printf("\n VOUS AVEZ TROUVE LE BON CHIFFRE !! \n \n");
}
}
Tout d'abord ce for rempli les cases 0 à 9 du tableau avec la valeur courante de n2 :
Code :
1
2
3
4
for(i=0;i<10;i++)
{
tableau[i]=n2;
}
Je pense que ce n'est pas ce que tu veux faire; pour mémoriser les saisies un simple :
en début de boucle devrait suffire... à condition de retouner en début de boucle après chaque saisie, je m'explique :
En utilisant seulement des if et jamais de else tu fais des tests sur n2 tout en changeant sa valeur ainsi tu ne contrôle pas par où "passe" ton programme
Prenons un exemple :
Pour commencer tu testes si "c'est plus grand", disons que c'est le cas donc tu fais changer la valeur de n2 par l'utilisateur disons qu'il tape un chiffre plus petit que la bonne valeur, ça tombe bien c'est justement ce qui est testé ensuite donc tu fais à nouveau changer la valeur de n2 par l'utilisateur, soyons fous, disons qu'il tape la bonne valeur, le test suivant te permettra de lui annoncer la bonne nouvelle, sauf qu'entre temps tu ne seras pas passé par le début ou la fin de ta boucle.
Pour mémoriser la valeur de n2, il est beaucoup plus pratique de retourner en début de boucle mais c'est aussi plus "logique", dailleurs ces deux lignes :
Code :
1
2
printf("\n Veuillez entrer le nombre de votre choix : \n \n");
scanf("%d",&n2);
n'ont pas besoin d'être dans 2 conditions différentes

L'idée c'est :

je mémorise la saisie
si c'est le bon chiffre
je l'annonce triomphalement
sinon
si c'est plus grand
je dit que c'est plus grand
sinon
je dit que c'est plus petit
je fais saisir un autre nombre à l'utilisateur
pythéas est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/02/2013, 20h44   #4
mambodiandra
Invité de passage
 
Femme Diandra
Étudiant
Inscription : février 2013
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Diandra
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2013
Messages : 3
Points : 0
Points : 0
Merci pour vos réponses ! Je vais appliquer vos conseils et revenir vers vous si j'ai de nouveaux quelques soucis
mambodiandra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 12h31   #5
mambodiandra
Invité de passage
 
Femme Diandra
Étudiant
Inscription : février 2013
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Diandra
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2013
Messages : 3
Points : 0
Points : 0
J'ai appliqué vos conseils mais le problème reste le même
mambodiandra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 09h45   #6
leternel
Expert Confirmé
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 220
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 1 220
Points : 2 596
Points : 2 596
Montre nous donc comment tu as appliqués nos conseils, en nous montrant ton code.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h42.


 
 
 
 
Partenaires

Hébergement Web