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 le contenu d'un tableau


Sujet :

C

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut Modifier le contenu d'un tableau
    Bonjour,
    J'essaie de modifier le contenue d'un tableaux mais quand j'essaie de lui attribuer une nouvelle valeur j'ai l'erreur "subscripted value is neither array nor pointer nor vector" j'ai cru comprendre qu'il fallait faire un pointer mais j'ai pas vraiment comprit ce qu'il fallait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SDL_Rect *test = &x[numberOfPlater];
    *test[1][1] = 10;
    Le contenue de mon tableaux est des SDL_rect. J'ai essayer ca sans trop comprendre ce que je faisait et comme attendu ça n'a pas fonctionner, si quelqu’un peux m'éclairer ^^

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Comment est déclaré x ? Le compilateur devrait produire des avertissements, voire des erreurs. Que dit-il ?

    Que pourrait signifier r = 10; lorsque r est de type SDL_Rect ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    x est déclarée de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Rect x[numberOfPlater]
    La seul érreure que génère le compilateur est "subscripted value is neither array nor pointer nor vector", aucun warning rien d'autre.
    Ce que je veux c'est changer les deux première coordonner du rect afin de déplacer le rectangle,
    donc si je modofie les deux première valeur je peux modifier l'absice et l'ordonner de mon rectange,

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    J’ai du mal à comprendre la manipulation des pointeurs que tu fais.

    Si x est un tableau alors on a une écriture de la forme x[].
    Écrire &x[] demande à accéder à l’adresse de l’adresse du tableau. L’interet ? Surtout que tu déclares un pointeur test à partir duquel tu utilises la variable contenue comme le pointeur du tableau x[]. C’est redondant il me semble.

    Soit tu utilises x sans les [] et tu accèdes au pointeur du premier élément, soit tu utilises x[] pour accéder à un élément quelconque de ce tableau en fonction de l’index transmis.

    Ensuite un tableau à deux dimensions n’existe pas en interne. Tous les tableaux, quelque soit le nombre de dimensions déclarées, est en réalité un tableau à une dimension.

    Pour vouloir accéder à une donnée (X,Y) on peut écrire ton code de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SDL_Rect *test = x;
    test[X + Y*numberOfPlater] = 10;

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    C'est justement ce qui me gène, le tableau a une seule dimension mais dedans j'ai un SDL_Rect de stocké. C'est-à-dire 4 valeurs (x,y,width,height) et j’aimerais pouvoirs modifier les deux premiers séparément sans toucher au reste, par exemple pour faire une animation qui déplacerait légèrement mon rectangle avant de mettre à jour l'écran.
    Je sais pas trop non plus ce que j'essayais de faire avec le pointer, je débute et ne sais pas trop (voire pas du tout) m'en servir.
    Ce que j'aimerais faire concrètement serait quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    x[1] = [100,100,20,10]
    for (i=0,i<hauteur souhaitée,i++)
    {  
      x[1] = [100,100+5*i,20,10]
      // actualisation de l'écran 
      // delai de 500 miliseconde
    }
    la rédaction ne correspond pas aux C mais c'est l'idée

  6. #6
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Le type SDL_Rect est un enregistrement, struct en C. On accède à ses objets membres via l'opérateur . (point). Il faut relire le cours à ce sujet.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Merci je ne connaissais même pas l’existence des enregistrement, j'ai relu le cour et comprend mieux, ça marche ^^
    Par contre si je fait ça, cela ne déplace pas proprement parler le rectangle j'en dessine un nouveaux à une autre position. Il y a pas un moyen de changer la position de l'autre rectangle ?
    Je suis obliger d'en tracer un autre et de supprimer l'ancien à chaque fois ?

  8. #8
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Tu peux dessiner autant de triangle que tu veux , chaque draw a sa position que tu acccede via SDL_Rect en général

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Je me suis mal exprimer ^^
    Je ne veux pas que le rectangle originelle reste, je veux juste en animer un mais comme si c'était le même rectangle qui bougeait. Parce que la je doit l'effacer à chaque fois et au début en plus de l'effacer il faut que je redessine le poteaux sur le quel il se trouvait (tour de hanoi)
    Je me demandait s'il n'existait pas une fonction qui pourrait le faire automatiquement

  10. #10
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    Par défaut
    Hello,

    Ce qui est affiché à l'écran le reste. Avec sdl, la seule manière de faire, c'est effacer l'écran et le redessiner (*). Ce qui veut dire remplir l'écran avec la couleur de fond, dessiner à nouveau les 3 poteaux, dessiner les rectangles représentant les disques et afficher le nouvel écran.

    À toi de bien penser tes fonctions d'affichage.

    (*) ce n'est pas tout à fait vrai: tu pourrais effacer le rectangle (le remplacer par la couleur de fond), dessiner uniquement la section de poteau nécessaire, et dessiner le rectangle à son nouvel emplacement avant de faire un nouvel affichage de l'écran. Mais c'est beaucoup de chipot pour pas grand chose, autant tout réafficher.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    C'est bien ce que je pensait mais je voulait l'éviter ^^ en tout cas merci, il me reste plus qu'a découvrir les événement et le programme devrait être compléter

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

Discussions similaires

  1. [JNA] Appeler une fonction modifiant le contenu d'un tableau
    Par Caduchon dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 01/08/2012, 15h11
  2. Modifier le contenu d'un tableau
    Par oneagaindoguys dans le forum Documents
    Réponses: 1
    Dernier message: 06/04/2010, 14h06
  3. [MySQL] Modifier le contenu d'un tableau associatif
    Par christophesav dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/04/2010, 16h50
  4. Modifier le contenu d'une cellule d'un tableau dynamiquement
    Par SPACHFR dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/08/2009, 16h45
  5. Réponses: 20
    Dernier message: 01/06/2005, 09h37

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