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 :

[DEBUTANT] Tableau et pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Par défaut [DEBUTANT] Tableau et pointeur
    Bonjour

    Je commence le C et je suis rendu au tableau avec les pointeurs et j'ai un petit souci.

    Je regroupe toute les fonctions dans un meme fichier ou on peut choisir laquelle executer avec un menu (par exemple 1 : Calculer la somme du tableau 2: la moyenne etc...)

    J'ai un souci au niveau des pointeurs mais je ne vois pas où.
    Je vous met mon code

    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
     
    static long tailletableau;
    static long *pointeurtaille;
    static long *pointeurtableau;
     
     
    int menu() //menu pour le choix des fonctions a executer sur le tableau
    {
        int choix;
        printf("==== MENU ====\n\n");
        printf("1 : Somme des valeurs du tableau\n");
        printf("2 : Moyenne des valeures du tableau\n");
     
        scanf("%d",&choix);
        return choix;
    }
     
    void init () //initialisation du tableau
    {
        long i;
            printf("Rentrez la taille du tableau : ");
        scanf("%ld",&tailletableau);
        long tableau[tailletableau];
            for (i = 0 ; i < tailletableau ; i++)
        {
            printf("Rentrez les valeurs du tableau : ");
            scanf("%ld", &tableau[i]);
        }
        pointeurtableau = &tableau;
        pointeurtaille = &tailletableau;
     
    }
     
    long sommetableau(long tableau[], long tailletableau)
    {
        long somme = 0;
        long i;
     
        for(i=0;i<tailletableau;i++)
        {
            somme = somme + tableau[i];
        }
        return somme;
    }
     
    void affiche(long *tableau, long tailletableau)
    {
        long i;
     
        for (i = 0 ; i < tailletableau ; i++)
        {
            printf("%ld\n", tableau[i]);
        }
    }
     
    int main()
    {
        init();
        //printf("%ld\n",pointeurtableau[0]); en rajoutant ces 2 lignes, ca plante (voir le probleme plus bas)
        //printf("%ld\n",pointeurtaille);
        printf("La somme du tableau vaut %ld", sommetableau(pointeurtableau, *pointeurtaille));
    return 0;
    }
    Quand je compile et execute ce programme, il marche bien (enfin ca a l'air)

    Puis je veux mettre en application le menu avec un switch.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    static long tailletableau;
    static long *pointeurtaille;
    static long *pointeurtableau;
     
     
    int menu()
    {
        int choix;
        printf("==== MENU ====\n\n");
        printf("1 : Somme des valeurs du tableau\n");
        printf("2 : Moyenne des valeures du tableau\n");
     
        scanf("%d",&choix);
        return choix;
    }
     
    void init ()
    {
        long i;
            printf("Rentrez la taille du tableau : ");
        scanf("%ld",&tailletableau);
        long tableau[tailletableau];
            for (i = 0 ; i < tailletableau ; i++)
        {
            printf("Rentrez les valeurs du tableau : ");
            scanf("%ld", &tableau[i]);
        }
        pointeurtableau = &tableau;
        pointeurtaille = &tailletableau;
     
    }
     
    long sommetableau(long tableau[], long tailletableau)
    {
        long somme = 0;
        long i;
     
        for(i=0;i<tailletableau;i++)
        {
            somme = somme + tableau[i];
        }
        return somme;
    }
     
    void affiche(long *tableau, long tailletableau)
    {
        long i;
     
        for (i = 0 ; i < tailletableau ; i++)
        {
            printf("%ld\n", tableau[i]);
        }
    }
     
    int main()
    {
        init();
        switch (menu())
        {
            case 1:
                printf("La somme du tableau vaut %ld", sommetableau(pointeurtableau, *pointeurtaille));
                break;
            default:
                printf("pas bon");
                break;
        }
    return 0;
    }
    Et la, quand j'execute il me rend une valeur totalement fausse (du genre 24564423)
    Si quelqu'un a une réponse a mon problème, je lui serai reconnaissant!!!

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    long tableau[tailletableau];
    tableau est déjà un pointeur sur long. Donc il ne faut pas prendre son adresse dans l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeurtableau = &tableau;
    Ecrit plutôt à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeurtableau = tableau;

  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 59
    Par défaut
    Bonjour,
    Essayes avec le malloc , ça devrait marcher, voici le code, Et puis y'avait des erreurs dans ton code aprés compilation, Non??

    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
     
    static long tailletableau;
    static long *pointeurtaille;
    static long *pointeurtableau;
     
     
    int menu()
    {
        int choix;
        printf("==== MENU ====\n\n");
        printf("1 : Somme des valeurs du tableau\n");
        printf("2 : Moyenne des valeures du tableau\n");
     
        scanf("%d",&choix);
        return choix;
    }
     
    void init ()
    {
        long i;
            printf("Rentrez la taille du tableau : ");
        scanf("%ld",&tailletableau);
        long *tableau;
    	tableau= (long*)malloc(tailletableau*sizeof(long));
            for (i = 0 ; i < tailletableau ; i++)
        {
            printf("Rentrez les valeurs du tableau : ");
            scanf("%ld", &tableau[i]);
        }
        pointeurtableau = tableau;
        pointeurtaille = &tailletableau;
     
    }
     
    long sommetableau(long tableau[], long tailletableau)
    {
        long somme = 0;
        long i;
     
        for(i=0;i<tailletableau;i++)
        {
            somme = somme + tableau[i];
        }
        return somme;
    }
     
    void affiche(long *tableau, long tailletableau)
    {
        long i;
     
        for (i = 0 ; i < tailletableau ; i++)
        {
            printf("%ld\n", tableau[i]);
        }
    }
     
    int main()
    {
        init();
        switch (menu())
        {
            case 1:
                printf("La somme du tableau vaut %ld", sommetableau(pointeurtableau, *pointeurtaille));
                break;
            default:
                printf("pas bon");
                break;
        }
    return 0;
    }
    Bonne chance!

  4. #4
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Citation Envoyé par mchk0123
    Quand tu écris :

    tableau est déjà un pointeur sur long. Donc il ne faut pas prendre son adresse dans l'instruction :

    Ecrit plutôt à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeurtableau = tableau;
    Il faudrait préciser à Nicolascrepe pourquoi, sinon ça ne sert à rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeurtableau = tableau;
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeurtableau = &tableau[0];
    Le pointeur prend comme valeur l'adresse du premier bloc du tableau.

  5. #5
    Nouveau candidat au Club
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Par défaut
    Non il n'y a pas d'erreur pendant la compilation,

    J'essaye de faire par une autre technique, je vous tiendrai au courant.
    J'ai fait trop de chose a la fois (je suis un vrai debutant, j'ai vu les pointeurs il y a 2 jours)
    Je vous tien au courant

  6. #6
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut pointeurs
    le tableau c est une adresse memoire dont on ne connait la ou ces valeurs pointes mais les pointeurs permettent de pointer a l'adresse direct dans la memoire

  7. #7
    Membre expérimenté Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Par défaut
    Theoriquement, lorsqu'on écrit :
    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
     
    void init () //initialisation du tableau
    {
        long i;
        printf("Rentrez la taille du tableau : ");
        scanf("%ld",&tailletableau);
        long tableau[tailletableau];
            for (i = 0 ; i < tailletableau ; i++)
        {
            printf("Rentrez les valeurs du tableau : ");
            scanf("%ld", &tableau[i]);
        }
        pointeurtableau = &tableau;
        pointeurtaille = &tailletableau;
     
    }
    Le tableau "tableau" est créé en tant que tableau local, donc détruit après l'appel de la fonction. Il faut utiliser un malloc et un free.

    Nouveau code :
    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
     
    void init () //initialisation du tableau
    {
        long i;
        printf("Rentrez la taille du tableau : ");
        scanf("%ld",&tailletableau);
        long* tableau=malloc(sizeof(long)*tailletableau);
            for (i = 0 ; i < tailletableau ; i++)
        {
            printf("Rentrez les valeurs du tableau : ");
            scanf("%ld", &tableau[i]);
        }
        pointeurtableau = &tableau;
        pointeurtaille = &tailletableau;
     
    }

Discussions similaires

  1. [debutant]Probleme de tableau de pointeurs
    Par doditch77 dans le forum Débuter
    Réponses: 1
    Dernier message: 03/01/2008, 20h02
  2. [Debutant]Tableau de pointeur char (char *)
    Par nephhh dans le forum Débuter
    Réponses: 8
    Dernier message: 03/11/2006, 00h48
  3. [debutant][tableau]
    Par Shooter dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/03/2005, 11h46
  4. [Debutant][Tableau] Tableau indexé sur chaine de caractères
    Par SamRay1024 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2004, 11h14
  5. Réponses: 23
    Dernier message: 21/08/2003, 07h16

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