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 :

Probleme avec un pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut Probleme avec un pointeur
    Salut

    Voila j'ai fais une fonction qui compare le nombre entré avec le nombre mystère en demandant a la fin si on veut continuer, alors pour ça j'ai déclaré un pointeur qui pointe sur la variable continuer qui se trouve dans le main, mais hélas ça fonctionne pas.. pourquoi?

    La fonction compare :

    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
    void compareNbrG(int nbrMystere)
    {
     
        int nbrE, continuer = 0,*ptr = NULL;
     
        do
        {
     
            printf("Quel est le nombre Mystere ? ");
            scanf("%d", &nbrE);
     
            if (nbrE < nbrMystere)
                printf("C'est plus ++ !\n");
            else if (nbrE > nbrMystere)
                printf("C'est moins -- !\n");
            else
            {
                printf("Bravo !! C'est bien le nombre Mystere !!\n\n");
                printf("Voulez vous continuer ?\n1. YES\n0. NO\n\n  ");
                scanf("%d", &continuer);
                if (continuer == 1)
                {
                    ptr = &continuer;
                    *ptr = 1;
                }
                else if (continuer == 0)
                {
                    ptr = &continuer;
                    *ptr = 0;
                }
            }
        }
        while (nbrE != nbrMystere);
    }

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Salut

    1)
    mais hélas ça fonctionne pas.. pourquoi?
    C'est normal : regarde la condition du while.

    2) Pourquoi modifier continuer via un pointeur ?

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                if (continuer == 1)
                {
                    ptr = &continuer;
                    *ptr = 1;
                }
                else if (continuer == 0)
                {
                    ptr = &continuer;
                    *ptr = 0;
                }
    Je n'ai pas compris l'utilité de cette partie de code... qui, de plus, ne provoque aucun effet.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    j'ai déclaré un pointeur qui pointe sur la variable continuer qui se trouve dans le main
    La variable continuer n'est pas dans le main(), elle est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void compareNbrG(int nbrMystere)
    {
     
        int nbrE, continuer = 0,*ptr = NULL;
    ....

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Je pense que tu as mal structuré ton programme. Il est préférable de faire quelque chose du style (pseudo code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fonction trouver_nombre:
    do
    saisie nombre_utilisateur
    while (condition : nombre trouvé ?)
     
    --
     
    fonction main:
    do
    appel fonction trouver_nombre
    demande continuer + saisie
    while (condition : continuer ? )

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut
    Merci, mais je crois que vous avez pas compris ce que je voulais dire, car a la fin de la fonction compare je veux retourné dans le main avec la valeur de "continuer changer" pour pouvoir faire la boucle jusqu'au menu..

    Voici mon main :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
     
    int main()
    {
     
        int choixNiveau,nbrM,nbrM1,nbrJoueurs,continuer = 0,compteur = 1,MIN = 0,MAX = 0;
     
        printf("\t\t\t\tBIENVENU AU PLUS OU MOINS\n\n");
        printf("\t*MENU*\n\n");
        printf("1. Niveau entre 1 et 10\n");
        printf("2. Niveau entre 1 et 20\n");
        printf("3. Niveau entre 1 et 50\n");
        printf("4. Niveau entre 1 et 100\n\n");
     
        printf("\t*JOUEUR*\n\n");
        printf("1. Jouer seul\n");
        printf("2. Jouer a 2\n\n");
     
        do
        {
            srand(time(NULL));
            do
            {
                printf("Quel niveau choisissez vous ? ");
                scanf("%d", &choixNiveau);
                if (choixNiveau < 1 || choixNiveau > 4)
                    printf("Choix incorrect !!!");
            }
            while (choixNiveau < 1 || choixNiveau > 4);
     
            do
            {
                printf("\nQuel est le nombre de joueurs ? ");
                scanf("%d", &nbrJoueurs);
                if (nbrJoueurs < 1 || nbrJoueurs > 2)
                    printf("Choix incorrect !!!");
            }
            while (nbrJoueurs < 1 || nbrJoueurs > 2);
     
            switch (choixNiveau)
            {
     
            case 1:
                printf("\nVous avez choisi le Niveau 1 : entre 1 et 10 !\n\n");
                MIN = 1;
                MAX = 10;
                break;
            case 2:
                printf("\nVous avez choisi le Niveau 2 : entre 1 et 20 !\n\n");
                MIN = 1;
                MAX = 20;
                break;
            case 3:
                printf("\nVous avez choisi le Niveau 3 : entre 1 et 50 !\n\n");
                MIN = 1;
                MAX = 50;
                break;
            case 4:
                printf("\nVous avez choisi le Niveau 4 : entre 1 et 100 !\n\n");
                MIN = 1;
                MAX = 100;
                break;
            default:
                printf("\nChoix incorrect !!!\n\n");
                break;
            }
     
            if (choixNiveau == 1)
            {
     
                nbrM = (rand() % (MAX - MIN + 1)) + MIN;
                compteur = 1;
                compareNbrG(nbrM);
            }
            printf("Continuer vaut : %d" , continuer);
     
            if (choixNiveau ==2)
            {
                printf("Quel est le nombre Mystere a trouve ? ");
                scanf("%d", &nbrM1);
                compteur = 1;
                system("cls");
                compareNbrT(nbrM1);
            }
     
        }
        while (continuer);
     
        return 0;
    }
    voici mes fonctions :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "fonction.h"
     
    void compareNbrG(int nbrMystere)
    {
     
        int nbrE, continuer = 0,*ptr = NULL;
     
        do
        {
     
            printf("Quel est le nombre Mystere ? ");
            scanf("%d", &nbrE);
     
            if (nbrE < nbrMystere)
                printf("C'est plus ++ !\n");
            else if (nbrE > nbrMystere)
                printf("C'est moins -- !\n");
            else
            {
                printf("Bravo !! C'est bien le nombre Mystere !!\n\n");
                printf("Voulez vous continuer ?\n1. YES\n0. NO\n\n  ");
                scanf("%d", &continuer);
                if (continuer == 1)
                {
                    ptr = &continuer;
                    *ptr = 1;
                }
                else if (continuer == 0)
                {
                    ptr = &continuer;
                    *ptr = 0;
                }
            }
        }
        while (nbrE != nbrMystere);
    }
     
     
     
    void compareNbrT(int nbrMystere1)
    {
     
        int nbrE,continuer = 0,*ptr = NULL;
     
        do
        {
     
            printf("Quel est le nombre Mystere ? ");
            scanf("%d", &nbrE);
     
            if (nbrE < nbrMystere1)
                printf("C'est plus ++ !\n");
            else if (nbrE > nbrMystere1)
                printf("C'est moins -- !\n");
            else
            {
                printf("Bravo !! C'est bien le nombre Mystere !!\n\n");
                printf("Voulez vous continuer ?\n1. YES\n2. NO\n\n  ");
                scanf("%d", &continuer);
                if (continuer == 1)
                {
                    ptr = &continuer;
                    *ptr = 1;
                }
                else if (continuer == 0)
                {
                    ptr = &continuer;
                    *ptr = 0;
                }
            }
        }
        while (nbrE != nbrMystere1);
    }

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Comme déjà dit plus haut, la variable continuer que tu modifies n'est pas dans le main() mais dans compareNbrG() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void compareNbrG(int nbrMystere)
    { 
        int nbrE, continuer = 0,*ptr = NULL;
    Si tu veux modifier une variable existant dans le main(), il faut passer son adresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main()
    { 
        int choixNiveau,nbrM,nbrM1,nbrJoueurs,continuer = 0,compteur = 1,MIN = 0,MAX = 0;
    ....
      compareNbrG(nbrM, &continuer);
    ....
     
    void compareNbrG(int nbrMystere, int * continuer)
    {
      int nbrE;
    ....
                scanf("%d", continuer);
    ....

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut
    Ah ok merci..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2007, 13h28
  2. problem avec les pointeurs
    Par Halloula dans le forum C
    Réponses: 3
    Dernier message: 22/01/2007, 16h54
  3. Réponses: 12
    Dernier message: 20/12/2006, 20h12
  4. [Débutant] Probleme avec les pointeurs
    Par amira dans le forum C
    Réponses: 14
    Dernier message: 04/12/2006, 14h27
  5. Probleme avec des pointeurs...
    Par barucca dans le forum C++
    Réponses: 5
    Dernier message: 23/08/2005, 21h05

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