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 :

Modifier la taille d'un tableau dynamique au seins d'un pgm


Sujet :

C

  1. #1
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut Modifier la taille d'un tableau dynamique au seins d'un pgm
    salut tt le monde

    je souhaite créer un tableau dont le nombre de cases n'est pas connu au depart:
    solution: Pointeur sans doute
    alors j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef int *ptr_int;
    ptr_int  tab;
    je suppose qu'au depart je n'ai besoin que d'une seule case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab=malloc(1*sizeof(int));
    je souhaitrerai augmenter la taille de tab chaque fois que l'utilisateur veut saisir d'autres valeurs:

    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
     int n=0;
     while(c!=2)
      {
      printf(" entrer une valeur");
      scanf("%d",&tab[n]);
       n++;
     
      printf("Ajouter d'autre valeur ? 1:Oui  2:Non");
      scanf("%d",&c);
     
        if (c==1) 
        {
         // si oui :je demande plus d'espace memoire pour l'utilisateur
         tab=malloc(n+1*sizeof(int));
         }
       }
    apres la saisie, et quand j'affiche le contenu de tab je trouve que quelques valeurs que j'ai introduit ont été modifiées.

    aidez moi pour augmenter la taille du tableau sans rencontrer ce genre d'erreurs.
    Merci.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    As-tu regarder la fonction realloc ?

  3. #3
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    tout d'abord :



    Pour ton soucis, il te faut un réalloc :

    http://rperrot.developpez.com/articl...llocationC/#L2

  4. #4
    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 : 67
    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 Re: Modifier la taille d'un tableau dynamique au seins d'un
    Citation Envoyé par Amine_sas
    je souhaite créer un tableau dont le nombre de cases n'est pas connu au depart:
    solution: Pointeur sans doute
    alors j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef int *ptr_int;
    ptr_int  tab;
    Compliqué et confusant. Il suffit d'utiliser int *. Tout le monde comprend.
    je suppose qu'au depart je n'ai besoin que d'une seule case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab=malloc(1*sizeof(int));
    oui, ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *tab = malloc (sizeof *tab * 1); /* '* 1' est facultatif */
    ne pas oublier que malloc() peut échouer. Avant toute utilisation, tester le pointeur 'tab'. Si il vaut NULL, l'allocation n'a pas réussi.
    je souhaitrerai augmenter la taille de tab chaque fois que l'utilisateur veut saisir d'autres valeurs:
    Tel que tu es parti, realloc().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     int n=0;
     while(c!=2)
      {
      printf(" entrer une valeur");
      scanf("%d",&tab[n]);
    Fonction difficile à utiiser correctement (ici, il manque un test de la valeur retournée et un vidage de stdin en cas d'erreur). Préférer fgets() + strtol(), par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       n++;
     
      printf("Ajouter d'autre valeur ? 1:Oui  2:Non");
      scanf("%d",&c);
     
        if (c==1) 
        {
         // si oui :je demande plus d'espace memoire pour l'utilisateur
         tab=malloc(n+1*sizeof(int));
         }
       }
    apres la saisie, et quand j'affiche le contenu de tab je trouve que quelques valeurs que j'ai introduit ont été modifiées.

    aidez moi pour augmenter la taille du tableau sans rencontrer ce genre d'erreurs.
    En utilisant correctement realloc()

    Un peu de lecture :

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    http://emmanuel-delahaye.developpez....tes.htm#malloc
    http://emmanuel-delahaye.developpez....es.htm#realloc

  5. #5
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Merci beaucoup.

    je fait tt mes premier debuts en C.

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Amine_sas
    Merci beaucoup.

    je fait tt mes premier debuts en C.
    en orthographe aussi ?
    Bon courage ....

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Trap D
    Citation Envoyé par Amine_sas
    Merci beaucoup.

    je fait tt mes premier debuts en C.
    en orthographe aussi ?
    Bon courage ....
    lol trap d

    Bon courage pour tes débuts en C et vers d'autres langages.

    Jette un coup d'oeil sur le site d'emmanuel aussi, il est pas mal.

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/01/2008, 23h36
  2. Réponses: 7
    Dernier message: 10/01/2007, 15h07
  3. Changer la taille d'un tableau dynamique
    Par clem1313 dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2006, 01h57
  4. Comment récupérer la taille d'un tableau dynamique ?
    Par Tchaill39 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2005, 14h21
  5. Connaitre la taille d'un tableau dynamique
    Par lewellah dans le forum C
    Réponses: 2
    Dernier message: 23/09/2005, 18h37

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