Probleme Urgent C tableau a deux dimensions

Probleme Urgent C tableau a deux dimensions - C - Programmation

Marsh Posté le 12-12-2006 à 17:34:17    

Mon probleme consiste a renvoyer un tableau a deux dimensions creer dans mon main  dans cette fonction je veux rajouter des valeurs puis que les valeurs soit sauvegardées dans le tableau est que le tableau soit réutiliser dans le main.
voiçi un exemple de programme qui est plus explicit que mon charabia maladroit çi dessus.
#include <stdio.h>
#include <stdlib.h>
 
int num_perso_ordi(int *tab_ordi)//apelle du tableau définie précedemment dans le main
 
{
 
 tab_ordi[0][0]=1;
 tab_ordi[1][0]=2;
 tab_ordi[2][0]=3;
 tab_ordi[3][0]=4;
 tab_ordi[4][0]=5;
 printf("\n.... %ld ",tab_ordi[0][0]);//affichage des differentes valeur du tableau
 printf("\n %ld ",tab_ordi[1][0]);
 printf("\n %ld ",tab_ordi[2][0]);
 printf("\n %ld.... ",tab_ordi[3][0]);
}
 
 
int main()
{
 int tab_ordi[5][5];//déclaration du tableau a 2 dimensions
 num_perso_ordi(tab_ordi);//utilisation de la fonction num_perso
 printf("\n.... %ld ",tab_ordi[0][0]);//affichage des valeurs ajouté dans la fonctions main pour controle
 printf("\n %ld ",tab_ordi[1][0]);
 printf("\n %ld ",tab_ordi[2][0]);
 printf("\n %ld.... ",tab_ordi[3][0]);
 
}
Ayant cherché plus de 2 heures je suis légérement desespéré donc si vous pouviez corriger ma syntaxe et m'expliquer en uqoi consister mon erreur je vous en serait reconnaisant

Reply

Marsh Posté le 12-12-2006 à 17:34:17   

Reply

Marsh Posté le 12-12-2006 à 17:39:01    

1] Utilise la balise [code] pour présenter ton code
2] Qu'est-ce qui ne fonctionne pas ?
3] Y'a un message ?
4] Tu compiles comment, avec quoi ?

Reply

Marsh Posté le 12-12-2006 à 17:43:30    

Chaos Intestinal a écrit :


4] Tu compiles comment, avec quoi ?

 

Bonne question [:dawa]

$ gcc -W -Wall -pedantic  test.c
test.c:4:34: warning: C++ style comments are not allowed in ISO C90
test.c:4:34: warning: (this will be reported only once per input file)
test.c: In function `num_perso_ordi':
test.c:8: error: subscripted value is neither array nor pointer
test.c:9: error: subscripted value is neither array nor pointer
test.c:10: error: subscripted value is neither array nor pointer
test.c:11: error: subscripted value is neither array nor pointer
test.c:12: error: subscripted value is neither array nor pointer
test.c:13: error: subscripted value is neither array nor pointer
test.c:14: error: subscripted value is neither array nor pointer
test.c:15: error: subscripted value is neither array nor pointer
test.c:16: error: subscripted value is neither array nor pointer
test.c: In function `main':
test.c:23: warning: passing arg 1 of `num_perso_ordi' from incompatible pointer type
test.c:24: warning: long int format, int arg (arg 2)
test.c:25: warning: long int format, int arg (arg 2)
test.c:26: warning: long int format, int arg (arg 2)
test.c:27: warning: long int format, int arg (arg 2)

 


edit : j'expliquerais bien ce qui va pas, mais faudrait un cours complet sur les pointeurs, et j'ai la flemme [:ken masters]
zieute ici : http://mapage.noos.fr/emdel et zone le site, ça devrait t'aider


Message édité par Elmoricq le 12-12-2006 à 17:51:18
Reply

Marsh Posté le 12-12-2006 à 18:58:58    

Code :
  1. int num_perso_ordi(int tab_ordi[][5])


 
voila déjà la bonne déclaration de ta fonction

Reply

Marsh Posté le 13-12-2006 à 10:50:30    

Et pourquoi c'est urgent ?

Reply

Marsh Posté le 13-12-2006 à 10:57:11    

Parce qu'il devait rendre son TD hier ? [:opus dei]

Reply

Marsh Posté le 13-12-2006 à 23:53:54    

kojiroperche a écrit :

Mon probleme consiste a renvoyer un tableau a deux dimensions creer dans mon main  dans cette fonction je veux rajouter des valeurs puis que les valeurs soit sauvegardées dans le tableau est que le tableau soit réutiliser dans le main.
voiçi un exemple de programme qui est plus explicit que mon charabia maladroit çi dessus.
#include <stdio.h>
#include <stdlib.h>
 
int num_perso_ordi(int *tab_ordi)//apelle du tableau définie précedemment dans le main
 
{
 
 tab_ordi[0][0]=1;
 tab_ordi[1][0]=2;
 tab_ordi[2][0]=3;
 tab_ordi[3][0]=4;
 tab_ordi[4][0]=5;
 printf("\n.... %ld ",tab_ordi[0][0]);//affichage des differentes valeur du tableau
 printf("\n %ld ",tab_ordi[1][0]);
 printf("\n %ld ",tab_ordi[2][0]);
 printf("\n %ld.... ",tab_ordi[3][0]);
}
 
 
int main()
{
 int tab_ordi[5][5];//déclaration du tableau a 2 dimensions
 num_perso_ordi(tab_ordi);//utilisation de la fonction num_perso
 printf("\n.... %ld ",tab_ordi[0][0]);//affichage des valeurs ajouté dans la fonctions main pour controle
 printf("\n %ld ",tab_ordi[1][0]);
 printf("\n %ld ",tab_ordi[2][0]);
 printf("\n %ld.... ",tab_ordi[3][0]);
 
}
Ayant cherché plus de 2 heures je suis légérement desespéré donc si vous pouviez corriger ma syntaxe et m'expliquer en uqoi consister mon erreur je vous en serait reconnaisant


 
T'as galéré plus de 2h sans te rendre compte que si "tab_ordi" est un tableau en 2D (un "int[][]" ), alors ce n'est certainement pas un "int *" ???
 
La première chose que doit faire un débutant (ce n'est pas une tare, on l'a tous été) c'est de prendre son cours/livre/internet et de LIRE. Et il n'y en a pas beaucoup de trucs à lire, il n'y en a que 4:  

  • le cours
  • les message du compilo (seul le premier parce qu'en général le premier truc incompris entraine tous les autres trucs)
  • le cours
  • le cours


Même moi qui programme sous unix depuis 1988, quand j'ai voulu apprendre Python cet été, j'ai téléchargé un cours Python depuis le net, je l'ai imprimé, relié puis LU !!!
 
Pour ton pb, t'as 3 façons de déclarer ta fonction

  • int num_perso_ordi(int tab_ordi[][5]) (cf réponse de Jésus Christ)
  • int num_perso_ordi(int tab_ordi[5][5])
  • void num_perso_ordi(int tab_ordi[5][5]) parce que je ne vois pas pourquoi on déclare "int" une fonction qui ne renvoie rien...


PS: Le format "%ld" de "printf()" est fait pour des "long int". Pour des "int", faut utiliser "%d". Voici d'ailleurs la liste des formats pour les int et ses dérivés
(signed) int => %d
unsigned int => %u
(signed) short (int) => %hd
(unsigned) short (int) => %hu
(signed) long (int) => %ld
(unsigned) long (int) => %lu


Message édité par Sve@r le 14-12-2006 à 22:50:27

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed