PB Tableaux multidimensionnel - débutant - C - Programmation
Marsh Posté le 04-01-2008 à 13:40:00
* ton allcoation est correcte, sauf qu'on ne transtype pas le retour de malloc (à part durant le 18e siécle)
* scanf est à proscrire, préfére fgets+sscanf
* chaine[] ne veut rien dire, ce que tu cherche c'est strcpy
Marsh Posté le 04-01-2008 à 14:11:59
Si je fais de cette manière, j'ai toujours une erreur à la ligne 22:
[Warning] passing arg 1 of `strcpy' makes pointer from integer without a cast "
Je déclare mal les cases de mon tableau mais je ne sais pas comment les déclarer correctement.
Code :
|
Marsh Posté le 04-01-2008 à 14:36:59
as tu vu le concept de structure ?
Typiquement ici, la bonne solution consiste à créer une structrue qui contient le nom (sous forme de char*) et la dépense (sosu forme d'un float par ex.)
Code :
|
Ensuite tu te donnes un ensemble de fonction qui crée/détruit/remplis une structure de ce type
Code :
|
Avec tout ça, il ne te reste qu'à créer un tableau dynamique de structure.
Code :
|
et à le remplir simplement
Code :
|
C'est de tête à chaud mais ca devrait te donner les bases
Marsh Posté le 04-01-2008 à 20:02:50
Merci beaucoup, j'ai appliqué cette méthode à quelque détails près et ca fonctionne très bien !
Neanmoins, quelque chose me tracasse dans ma première ébauche.
J'ai appris qu'on allouait dynamiquement des tableaux de 2D de cette manière :
char *tab;
tab = malloc ( sizeof(*tab) * taille * taille2);
et qu'on accédait aux cases par tab[taille2*i1 + i2].
Donc si je fais ca, pourquoi je me retrouve avec une erreur au niveau de strcpy ?
Code :
|
Marsh Posté le 04-01-2008 à 20:19:44
yoyo2215 a écrit : |
Tu as mal appris.
http://forum.hardware.fr/hfr/Progr [...] 0227_1.htm
Marsh Posté le 04-01-2008 à 20:36:09
J'ai trouvé cette info sur http://c.developpez.com/faq/?page=tableaux , une page de Developpez.com.... mais je vais regarder le lien que tu me donnes!
Marsh Posté le 04-01-2008 à 20:57:39
J'ai alloué mon tableau de manière plus reglementaire :
Code :
|
J'accède donc aux cases de ce tableau par tab[i][j].
Mais pourquoi je rencontre une erreur lorsque je souhaite copier la chaine de caractère(l'entier transtypé) dans mon tableau [i][j] ?
[Warning] passing arg 1 of `strcpy' makes pointer from integer without a cast
Code :
|
Marsh Posté le 04-01-2008 à 21:02:09
yoyo2215 a écrit : |
U = FAIL
Un tableau à N dimensions ne necessite que N malloc pas N*taille.
Ensuite ton tableau de char ne contien pas du tout ce que tu crois.
tab[i][j] poitn vers un char pas un char*
Hors d ela soluce avec struct, tu t'exposes à du beau caca
Marsh Posté le 04-01-2008 à 22:15:46
yoyo2215 a écrit : J'ai appris qu'on allouait dynamiquement des tableaux de 2D de cette manière :
|
C'est une façon de faire, oui. Mais ici, on t'a proposé un tableau de structures, ce qui est beaucoup plus rationnel vu le projet.
Marsh Posté le 04-01-2008 à 22:59:06
Oui je suis tout a fait d'accord, c'est plus cohérent et simple avec une structure.
Mais quand même comment fait on pour copier une chaine de caractère dans une case d'un tableau à deux dimensions en utilisant strcpy ?
Marsh Posté le 04-01-2008 à 23:36:25
yoyo2215 a écrit : Oui je suis tout a fait d'accord, c'est plus cohérent et simple avec une structure. |
Code :
|
|
Marsh Posté le 04-01-2008 à 13:26:44
Bonjour,
Je débute en C et je voudrais créer un tableau à 2 dimensions.
Il doit comporter sur la première ligne des caractères et sur la deuxième des entiers.(J'ai transtypé les entiers en caractère).
J'ai plusieurs problèmes:
- Le nombre de colonnes dépend d'une entrée au clavier, je ne peux pas le définir dès le début. Comment faut il faire ?J'ai tenté de réalisé une allocation dynamique de mon tableau mais je doute qu'elle soit exacte.
- J'ai transtypé les entiers en caractères à l'aide de la commande sprintf, mais il y a une erreur à la ligne 22.
- D'autre part, je n'arrive pas à accéder correctement aux cases de mon tableau ainsi créee pour le remplir.
Merci de votre aide.