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 :

Initialiser tableau en fonction d'un char*


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut Initialiser tableau en fonction d'un char*
    Bonjour,

    j'aimerai savoir quelle est la meilleure manière d'initialiser un tableau d'entier à partir d'une chaîne de caractères lue au clavier...

    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
     
    void readValue(M *m)
    {
        const int lignes = m->nbLignes;
        const int colonnes = m->nbColonnes;
        int i;
        char c;
     
        char buffer[lignes*colonnes], *p; // lignes*colonnes pour une "marge dans la saisie"
     
        printf("Saisir ligne %d : ", i);
        fgets(buffer, sizeof(buffer), stdin);
     
        // Vide le buffer clavier, supprime le retour chariot
        if((p = strchr(buffer, '\n')) != NULL)
            *p = '\0';
        else
        {
            do {
                c = getchar();
            }while(c != '\n' && c != EOF);
        }
    }
    J'obtiens donc une liste de valeurs (variable), sous forme d'entiers séparés par des espaces. Je fais ça dans le but de me faciliter la saisie d'un tableau d'entier.

    Ma question est donc comment initialiser un tableau dynamique à partir des valeurs contenus dans ce flux? J'avais pensé à vsscanf mais je n'en suis pas sûr et ne sais pas l'utiliser

    Exemple :
    buffer = "1 2 3 4 5 6 7 8 9 10"
    tabint = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  2. #2
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Une fois ta chaîne de caractères récupérée:
    buffer = "1 2 3 4 5 6 7 8 9 10"
    Je ferais une première étape qui consiste à compter le nombre d'entiers saisis.
    Pour cela, j'utiliserais la fonction strtok() avec comme délimiteur l'espace. Je stockerais dans un compteur le nombre d'occurrences.

    Ensuite, l'allocation du tableau dynamique via malloc() en fonction du compteur.

    Enfin la récupération des nombres entiers saisis par l'utilisateur via à nouveau la fonction strtok() avec l'utilisation de la fonction strtol() ou strtoul() pour convertir la chaîne de caractère récupérée sous forme d'entier. Ce dernier sera stockée dans ton tableau dynamique.

  3. #3
    Expert éminent
    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
    Par défaut
    Citation Envoyé par homeostasie Voir le message
    Une fois ta chaîne de caractères récupérée:

    Je ferais une première étape qui consiste à compter le nombre d'entiers saisis.
    Pour cela, j'utiliserais la fonction strtok() avec comme délimiteur l'espace. Je stockerais dans un compteur le nombre d'occurrences.

    Ensuite, l'allocation du tableau dynamique via malloc() en fonction du compteur.

    Enfin la récupération des nombres entiers saisis par l'utilisateur via à nouveau la fonction strtok() avec l'utilisation de la fonction strtol() ou strtoul() pour convertir la chaîne de caractère récupérée sous forme d'entier. Ce dernier sera stockée dans ton tableau dynamique.
    Ca me parait bien compliqué... Avec strto[u]l() et realloc(), on peut tout faire en une seule boucle...

Discussions similaires

  1. prob fonction simple initialisation tableau
    Par sneb5757 dans le forum C
    Réponses: 17
    Dernier message: 13/11/2006, 13h46
  2. [mise à jour tableau en fonction du button radio]
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 30/12/2005, 11h41
  3. tableau et fonction en c++
    Par flobx dans le forum C++
    Réponses: 5
    Dernier message: 13/11/2005, 15h12
  4. [Debutant] Initialisation tableau []
    Par Pumpkins dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 15/09/2004, 00h02
  5. Initialisation tableau
    Par poinclin dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/06/2004, 15h39

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