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 :

tableau dynamique de chaînes de caractères


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Réunion

    Informations professionnelles :
    Activité : Trésorier

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut tableau dynamique de chaînes de caractères
    Bonjour,

    je crois que tout est dans le titre. J'ai un travail universitaire à faire : création d'un jeu sous console et sans interface graphique, c'est donc du niveau presque débutant.

    Je voudrais créer un tableau pour les noms des joueurs (on peut aller jusqu'à 26). Je préférerais que ce tableau soit de taille variable, selon le nombre des joueurs saisi par l'un d'eux, mais aussi que les noms soient vraiment des chaînes de caractères donc également de taille variable.

    Avec malloc, je sais créer un tableau de taille constante de pointeurs vers des chaînes de caractères, ou un tableau de taille variable de pointeurs vers des tableaux de taille fixe.

    Donc ma question est : peut-on créer un tableau bidimensionnel dont les deux dimensions sont variables, et la deuxième à l'intérieur de la première (parce que faire une matrice m x n de taille variable, je sais aussi, mais ce n'est pas ce que je veux). J'ai cherché depuis plusieurs heures et je n'ai rien trouvé. Peut-être n'est-ce pas possible ?

    Merci d'avance pour le temps que vous consacrerez à me répondre !
    Cordialement.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Réunion

    Informations professionnelles :
    Activité : Trésorier

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut j'ai trouvé !
    En fait c'est tout à fait possible en combinant les deux méthodes :

    - déclaration d'un tableau de pointeurs vers des chaînes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char ** tab; = malloc(n*sizeof(char*));
    )

    - allocation dynamique de mémoire pour chaque pointeur vers une chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab[i] = malloc(longueur_chaine*sizeof(char));
    scanf("%s",tab[i]);
    Mon problème se situait entre les deux car je ne parvenais pas à obtenir la longueur de la chaîne de caractères entrée par le joueur, ce qui est pourtant facile avec getchar.

    Bon, eh bien si ça peut servir à quelqu'un ...
    cordialement !

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Fais bien attention, au cas ou l'utilisateur tape plus de lettres que ce que contient 'longueur_chaine'
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Peut être devrais tu envisager l'utilisation d'une liste pour garder les noms de tes joueurs

    C'est un peu plus complexe à mettre en oeuvre (création des structures et des fonctions qui vont bien), mais, à moins que tu ne doive avoir accès au noms de joueurs de manière aléatoire, la liste représente la structure dynamique la mieux adaptée, à mon sens
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Réunion

    Informations professionnelles :
    Activité : Trésorier

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut merci !
    bonjour,

    d'abord merci LittleWhite ; je n'ai pas bien précisé que longueur_chaine était déterminé avec getchar() en fonction de la chaine réelle entrée par le joueur ; l'inconvénient est qu'on peut entrer une chaîne aussi longue qu'on veut ! Mais je vais y mettre bon ordre en formatant correctement scanf. De toutes façons j'ai un pb (évidemment) avec les espaces dans scanf, je vais donc me remettre sur le très bon tuto du site.

    koala01 merci aussi ; je peux faire ça pour la question suivante mais en principe pour celle-ci je ne dois utiliser que des tableaux dynamiques. Mais c'est vrai qu'avec une structure chaînée j'aurais toutes les infos du joueur rassemblées dans la même variable structure.

    Cordialement et bon week-end !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Réunion

    Informations professionnelles :
    Activité : Trésorier

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut pas si simple
    non, en fait ce n'était pas si simple, impossible de déterminer la longueur d'une chaîne entrée sur stdin sans la lire et donc la consommer (du moins je sais pas faire), et j'ai dû quand même rajouter un tableau-tampon pour stocker cette chaîne en même temps qu'on évalue sa longueur (ce que j'aurais pu faire après avec strlen, certes), puis la copier vers la chaine pointée par le pointeur élément de mon tableau de noms.

    M'enfin ça marche finalement ...

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

Discussions similaires

  1. Tableau de séquence (chaîne de caractères)
    Par galostroy dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/02/2015, 16h12
  2. Réponses: 23
    Dernier message: 16/10/2014, 18h39
  3. Tableau croisé et chaîne de caractères
    Par sylvain6874 dans le forum Cognos
    Réponses: 1
    Dernier message: 16/02/2012, 15h19
  4. Réponses: 17
    Dernier message: 19/04/2011, 08h16
  5. Réponses: 13
    Dernier message: 18/07/2007, 09h01

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