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 :

[débutant] problème création tableau (pointeurs and Cie)


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut [débutant] problème création tableau (pointeurs and Cie)
    Bonjour à tous je débute le C, et j'ai un peu de mal avec ces satanés pointeurs
    Mon programme est simple : je déclare un tableau tab[10], dans lequel je place 10 nombres aléatoires.

    j'obtiens ceci en message d'erreur : warning: return makes pointer from integer without a cast et je sais pas trop d'où ça peut venir

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int *Creer_Stock ()
    {
        srand (time (NULL));
     
        int i,poidsEngin,*stock;
        stock = malloc(sizeof(int)*10);
     
        if (stock == NULL) exit (0);
        else
        {
            for (i = 0 ; i < 10 ; i++)
            {
                poidsEngin =  ( rand() % 7 ) + 4 ;
                stock [i] = poidsEngin ;
            }
            return *stock;
        }
    }
     
     
    int main()
    {
     
    int *tab = Creer_Stock();
     
    for (i = 0 ; i < 10 ; i++)
            printf("%d ",tab[i]);
     
        return 0;
    }
    Voila en espérant avoir été clair

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    stock est un pointeur sur entier,
    * stock est un entier

    devrait suffire.

    PS : manque aussi la déclaration de i dans la fonction main.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    Ouais c'est bon merci beaucoup
    marre d'être aussi tarte

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Salut,
    Stock est de type int*
    Creer_Stock doit retourner une variable de type int*
    *Stock est de type int

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    merci pour vos réponses,
    je continue mon programme et je vous tiens au courant

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    c'est encore moi ^^
    cette fois j'aimerais créer une fonction qui travaille avec les @ de "poids" et "taille" de mon tableau crée au préalable. C'est la taille qui me pose problème (le poids semble fonctionner)

    Voila 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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <strings.h>
     
     
    int *Creer_Stock ()
    {
        int i,poidsEngin,*stock;
        srand (time (NULL));
        stock = malloc(sizeof(int)*10);
     
        if (stock == NULL) exit (0);
        else
        {
            for (i = 0 ; i < 10 ; i++)
            {
                poidsEngin =  ( rand() % 7 ) + 4 ;
                stock [i] = poidsEngin ;
            }
            return stock;
        }
    }
     
    void Gerer_Stock( int *tab , int *taille , int *poids )
    {
        int i;
     
        *taille = sizeof(tab);
     
        for (i=0 ; i<*taille ; i++)
        {
            *poids = *poids + tab[i] ;
        }
     
    }
     
     
        int main()
    {
     
        int i,taille=0,poids=0;
        int *tab = Creer_Stock();
     
        Gerer_Stock (tab,&taille,&poids);
     
        for (i = 0 ; i < 10 ; i++)
            printf("%d ",tab[i]);
     
        printf("taille %d poids %d ",taille,poids);
     
        return 0;
    }

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Mauvais. Tout ce que cette ligne fait, c'est *taille = sizeof(int*), qui est toujours égal à 4 sur un système x86 32 bits (ou 8 sur un système 64 bits).

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Mauvais. Tout ce que cette ligne fait, c'est *taille = sizeof(int*), qui est toujours égal à 4 sur un système x86 32 bits (ou 8 sur un système 64 bits).
    Ouais j'y ai pensé. Mon tableau étant une chaine , je devrais pouvoir utiliser stren(tab). Seulement le compilo n'aime pas
    |warning: passing arg 1 of `strlen' from incompatible pointer type|

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Si ton tableau est une chaîne de caractères, pourquoi son type est-il int* ?

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Si ton tableau est une chaîne de caractères, pourquoi son type est-il int* ?
    Ben avec une chaine d'entiers , la fonction strlen() devrait marcher, me tromp-je ?

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par olivier1209 Voir le message
    Ben avec une chaine d'entiers , la fonction strlen() devrait marcher, me tromp-je ?
    Oui, tu te trompes. strlen() ne fonctionne qu'avec les chaines. Or, en C, une chaine est portée par un tableau de char.

  12. #12
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    Voilà j'ai terminé
    je met mon code ça peut servir à quelqun d'autre
    Dites moi si vous voyez des énormités dans les commentaires lol

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <strings.h>
     
     
    int *Creer_Stock ()  // creer un stock de 10 engins
    {
        int i,poidsEngin,*stock;
        srand (time (NULL)); // prend le timestamp pour l'initialisation et s'en sert de "graine" pour le random
        stock = malloc(sizeof(int)*10); // allocation de mémoire
     
     
        if (stock == NULL) exit (0); // si l'allocation se fait sans prob, on continue
        else
        {
            for (i = 0 ; i < 10 ; i++) // on parcours les 10 cases du tableau
            {
                poidsEngin =  ( rand() % 7 ) + 4 ; // poids entre 4 et 10
                stock [i] = poidsEngin ; // remplissage du tableau
            }
     
            return stock; // renvoie le tableau
        }
    }
     
    void Gerer_Stock( int *tab ,int *taille , int *poids ) // pour connaitre le poids d'un stock
    {
        int i=0;
     
        for (i=0 ; i<*taille ; i++) // tant qu'on ne dépasse pas la tailleMAX
        {
            *poids = *poids + tab[i] ; // on somme tous les poids du tableau
        }
     
    // on ne renvoie rien car on travaille sur l'adresse des valeurs directement
    }
     
     
    int *Creer_Stock_Max (int *taille) // creer un Stock sans dépasser 150 en poids total
    {
     
        srand (time (NULL));
        int i=0,poidsEngin,*stock,poidsTotal=0;
     
        stock = malloc(sizeof(int)*50); // allocation suffisemment grande
     
        if (stock == NULL) exit (0);
        else
        {
            while (poidsTotal <= 140)
            {
                poidsEngin =  ( rand() % 7 ) + 4 ;
                stock [i] = poidsEngin ;
                poidsTotal += poidsEngin;
                i++ ;
            }
     
     
            *taille = i ;  // i est la taille du tableau
     
            return stock;
        }
    }
     
     
     
    int main()
    {
     
        int i,taille=0,poids=0;
        int *tab;   // déclaration du tableau
     
        tab = Creer_Stock_Max(&taille); // appel de la fonction pour creer un stock
     
        Gerer_Stock (tab,&taille,&poids); // on rentre en paramêtre les adresse de taille , et de poids
     
     
        for (i=0 ; i<taille ; i++)
        {
            printf ("%d ",tab[i]);  // affiche stock total
        }
     
        printf ("\n\nNombre d'engin : %d\nPoids total du stock : %d\n",taille,poids);
     
     
     
        return 0;
    }
    PS : petite question annexe : je ne sais pas trop comment libérer la mémoire allouée à mon tableau. free(stock) devrait se mettre dans la fonction Creer_Stock_Max (int *taille). Seulement où je ne sais pas

  13. #13
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par olivier1209 Voir le message
    PS : petite question annexe : je ne sais pas trop comment libérer la mémoire allouée à mon tableau. free(stock) devrait se mettre dans la fonction Creer_Stock_Max (int *taille). Seulement où je ne sais pas
    Tu libères dès que tu en as plus besoin, dans ton code ça pourrait être juste après la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     	for (i=0 ; i<taille ; i++)
    	{
    		printf ("%d ",tab[i]);  // affiche stock total
    	}
    	free(tab);
           tab = NULL;

  14. #14
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    oki merci

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

Discussions similaires

  1. Problème création tableau
    Par chnimois dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/05/2008, 13h55
  2. [Débutant][XSLT] Création tableau
    Par Mr Vincent dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 28/12/2007, 21h14
  3. [Débutant] Problème avec tableau à deux dimensions
    Par beegees dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/12/2006, 14h06
  4. [Débutant] Problème de Tableau dans FireFox
    Par virgul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/09/2006, 14h53
  5. [Débutant] Problème de création et de remplissage de tableau
    Par pinggu dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 24/05/2006, 15h50

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