IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Afficher tableaux avec des saisies faite par l'utilisateur


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut
    Bonjour,

    Si tu veux mémoriser les saisies de l'utilisateur la boucle suivante pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses ! Je vais appliquer vos conseils et revenir vers vous si j'ai de nouveaux quelques soucis

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai appliqué vos conseils mais le problème reste le même

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    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.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/03/2015, 18h32
  2. Réponses: 8
    Dernier message: 02/12/2010, 19h39
  3. Probleme avec des logs générés par une application
    Par yayamo dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 16/04/2008, 14h41
  4. [Tableaux] Suivre les modifications faits par chaque utilisateur
    Par dessinateurttuyen dans le forum Langage
    Réponses: 7
    Dernier message: 19/07/2006, 10h05
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo