question bete : probleme dans la déclaration d'un tableau - C++ - Programmation
Marsh Posté le 13-12-2002 à 21:44:02
j'ai modifié mon print (i) avec ce que tu m'as dit.
ca m'affiche toujours
|
(enfin ca fait deja une erreur de résolue )
l'autre erreur vient du tableau non ?
j'utilise gcc, mais je sais pas a quoi sert malloc.
Marsh Posté le 13-12-2002 à 21:56:26
ben t'as 3 solution: soit tu mets à jour ton compilateur, soit tu cherches un cours sur les allocations dynamiques en C (site ou livre), soit t'attend qu'une bonne ame ou moi meme t'explique (mais la tu risque peut etre d'attendre indéfiniment )
Marsh Posté le 13-12-2002 à 21:57:47
Taz@PPC a écrit : ben t'as 3 solution: soit tu mets à jour ton compilateur, soit tu cherches un cours sur les allocations dynamiques en C (site ou livre), soit t'attend qu'une bonne ame ou moi meme t'explique (mais la tu risque peut etre d'attendre indéfiniment ) |
c'est si compliqué de définir un tableau avec une variable comme nombre de cellules ?
Marsh Posté le 13-12-2002 à 22:03:47
Library a écrit : |
non, mais tu est tres debutant. tu as deja entendu parlé des pointeurs ! ton code est correct mais est fait partie de la derière révision du C (norme C99): ca fonctionne mais dans toncas il vaut meiux préférer l'allocation dynamique (taille inconnue à la compilation)
petit exemple:
Code :
|
Marsh Posté le 13-12-2002 à 22:11:58
Taz@PPC a écrit : non, mais tu est tres debutant. tu as deja entendu parlé des pointeurs ! ton code est correct mais est fait partie de la derière révision du C (norme C99): ca fonctionne mais dans toncas il vaut meiux préférer l'allocation dynamique (taille inconnue à la compilation)
|
j'avais deja essayé de programmer en C y a qq temps, je m'étais heurté au probleme des pointeurs. Apres un peu de lecture, j'avais rien compris
je vais essayer de m'informer plus sur ce que c'est, mais en attendant, si je me sers de ton code est ce que tab est un tableau "normal" avec le nombre de cellules que je veux ?
Marsh Posté le 13-12-2002 à 22:31:36
j'ai encore plein d'erreurs
voici mon code :
Code :
|
et les erreurs :
config.c: In function `main': |
faut que je déclare des variables ?
Marsh Posté le 14-12-2002 à 20:50:47
c'est bon ca ca marche
merci
maintenant j'ai un autre probleme, cette fois pour afficher un texte. Il n'y a pas d'erreur lors de la compilation, mais le printf me revoie "Erreur de segmentation". Faut faire quoi pour que ca marche ?
Code :
|
Marsh Posté le 14-12-2002 à 21:02:58
Library a écrit : c'est bon ca ca marche
|
Il faut allouer de la mémoire à ton tableau avant d'écrire dedans. Là, fichier est juste nu pointeur, avec rien derrière, c'est même bizarre que le scanf passe.
->AVANT toute utilisation de ton tableau,il faut allouer la mémoire (malloc)
->APRES la dernière utilisation de ton tableau il faut libérer la mémoire (free)
Marsh Posté le 14-12-2002 à 21:09:13
merci, ca marche
en plus je crois que je commence a comprendre les pointeurs
Marsh Posté le 15-12-2002 à 00:24:31
Library a écrit : merci, ca marche |
la route est encore longue j'ai bien peur
Marsh Posté le 15-12-2002 à 04:13:57
Code :
|
Marsh Posté le 15-12-2002 à 11:14:28
Taz@PPC a écrit : la route est encore longue j'ai bien peur |
oui ca j'en suis sur
d'ailleurs j'ai un autre probleme
je veux concaténer des chaines de caracteres. J'ai vu qu'il fallait se servir de strcat. Mais comment faire pour concatener une chaine de caracteres avec un entier ou un float ?
j'ai essayé de changer le type de l'int en char mais j'ai pas réussi.
comment faire ?
Marsh Posté le 15-12-2002 à 11:48:30
avec sprintf. tu veux pas t'acheter un livre sur le C (comme le Kernighan & Richie) ou installer linux histoire d'avoir les man sont la main, sachant qu'il n'existe pas à ma connaissance de tutoriel valable pour apprendre le C sur le net. si tu as des problèmes, on va t'aider, mais si il faut qu'on te decrive tout la bibliothèque standard, ca risque de prendre du temps, et pour nous, et pour toi.
Marsh Posté le 15-12-2002 à 12:00:59
je suis sous linux (mais je sais pas encore trop m'en servir). Faut taper quoi pour avoir les aides ? (man je sais, mais quoi apres ?)
oui faudra surement que je m'achete un bouquin, mais la j'en ai pas sous la main.
j'ai essayé de trouver sur le net et c'est vrai qu'il y a pas grand chose.
Marsh Posté le 15-12-2002 à 20:00:06
elle a pas tardé a venir
enfin c'est pas une erreur, mais je sais pas du tout comment programmer ce que je veux :
je veux un tableau de chaines de caracteres, i.e. dans chaque contenu[i] il y aura une chaine de caracteres. Je pense que c'est un tableau de caracteres contenu[i][j] mais je sais pas trop comment le faire.
a mon avis c'est un
char **contenu;
mais apres je met quoi dans les sizeof du malloc ?
je met
*contenu=malloc(nombre*sizeof(int));
contenu=malloc(25*sizeof(char));
?
(sachant que mes chaines de caracteres font environ 25 caracteres)
merci
Marsh Posté le 15-12-2002 à 20:06:30
sizeof(char) == 1 par définition.
si tu connais la taille des tes chaines, pas besoin de malloc a priori
Code :
|
Marsh Posté le 15-12-2002 à 21:06:18
il vaut mieux "caster" explicitement le malloc
Code :
|
avec "type" le type de données (char, int, ....) sinon sous certains OS (sur nos serveurs HP par exemple) y'a des warnings à la con à la compilation.
Et n'oubliez pas le
Code :
|
Pour être sûr qu'il n'y a pas eu d'erreurs d'allocation
Marsh Posté le 15-12-2002 à 21:15:13
merci, ca marche bien
enfin j'ai tjs un probleme
j'essaie de "mélanger" mon tableau de chaines de caracteres.
Code :
|
ca me met "donnees.c:77: incompatible types in assignment"
Marsh Posté le 15-12-2002 à 21:42:46
donne un morceau de code plus complet et expliques ce que tu veux faire.
tu melanges tableau et pointeur.
tmp est un tableau de char et ne peut pas etre modifié (son contenu si) et e est un type flottant: c'est absolument incompatible. il faut deja absolument que e et f soit des entiers positifs et que leur index soit valide. ensuite si tu veux permuter ces éléments, le plus simple ce n'est pas de tenter de recopier le tableau (ce que tu voudrais bien faire), mais de permuter les pointeur. tmp doit donc etre un char*
commande un livre pour nowel.
du bon usage du générateur de nombres pseudo-aléatoire (drand48() n'est pas standard, mais ca vaut pour lui aussi)
Code :
|
Marsh Posté le 15-12-2002 à 21:53:58
Taz@PPC a écrit : donne un morceau de code plus complet et expliques ce que tu veux faire.
|
ce que je veux faire c'est échanger les contenus de contenu[e] et contenu[f]. Pour cela, il faut que je passe pas une variable intermédiaire. Comme contenu[e] et contenu[f] sont des chaines de caracteres, il faut donc que tmp soit une chaine de caracteres non ?
e et f sont des entiers positifs je pense (floor d'un nombre flottant positif)
Marsh Posté le 15-12-2002 à 22:08:05
merci de m'avoir cité en entier
contenu[e] et contenu[f] ne sont pas des chaines de caractères, mais des pointeurs vers des zones contigues de bits pouvant etre interprétées comme une chaine de caractère. permute les pointeurs et c'est gagné. les contenus pointés ne sont pas déplacés, seuls les pointeurs qui les référence sont permutés.
et assure toi plus sérieusement de la validité de e et f qui doivent etre de type entier (pas flottant) et j'ai bien dit type, et d'index valide [0 , n[
Marsh Posté le 15-12-2002 à 22:24:14
en mettant char * tmp, ca ne met plus d'erreur
j'ai déclaré e et f comme entiers, il m'aurait mis une erreur si j'avais voulu mettre un float dedans non ?
et je crois que drand48() renvoie un float entre 0 et 1. Comme je le multiplie par le nombre d'éléments de mon tableau ca devrait rouler
Marsh Posté le 15-12-2002 à 22:35:58
au temps pour moi, je m'étais planté dans mon code : le 100 c'est en fait nombre (mais comme au début je testais que pour nombre=100, j'ai mis 100 sans faire expres)
sinon faut que je change mon rand, drand48() ne me donne pas de bons résultats (bcp de valeurs proches de 9). C'est normal ca ?
ton code donne de bons résultats ?
Marsh Posté le 15-12-2002 à 22:38:58
Library a écrit : au temps pour moi, je m'étais planté dans mon code : le 100 c'est en fait nombre (mais comme au début je testais que pour nombre=100, j'ai mis 100 sans faire expres) |
il marche impeccablement mais peut etre l'utilsie mal. tu as bien mis le srand(time(NULL)) ? montre ton code complet modifié
Marsh Posté le 15-12-2002 à 22:42:36
nan en fait c'est bon. c'est du à une sélection de valeurs que j'ai faite qui a pour effet de garder autant de "grandes" valeurs que de valeurs "moins grandes"
donc ca me garde bcp de 9.
j'ai vérifié sur 10000 rand, ca fait une moyenne de 0.497895, c'est pas mal
encore merci pour ton aide
je vais arreter pour ce soir
Marsh Posté le 16-12-2002 à 21:51:19
J'ai un probleme pour déclarer un tableau en variable globale :
mon tableau global qui marche pas c'est *couche (enfin c'est encore un pointeur au moment ou je le déclare)
je commence par récuperer des valeurs dans un fichier (fonction config). Ensuite, dans la fonction main je défini mon tableau couche a partir des donnees que j'ai récupéré.
mon probleme est que lorsque je met "printf("%d",couche[0]);" dans ma fonction main ca me met "Errreur de segmentation" (alors que lorsque je met la meme ligne dans la fonction config ca m'affiche ce qu'il faut.
comment faire ?
mon code :
Code :
|
merci
Marsh Posté le 17-12-2002 à 08:08:41
c pas le printf qui merde, c'est ça
w=malloc(nbcouches*max*max*sizeof(float));
w[c][i][j]=w[c*max*max+i*max+j]
sachant que w est un float*. par contre ton code est assez mal foutu. j'ai jamais vu autant de variables globales. et il est inutile de donner les prototypes de fonctions des bibliotheques (ca sert à ça les .h) et si tu définis tes fonctions utilisateurs apres main, à ce moment la, mets les prototypes justes apres les includes
et au fait: tu peux combiner tout tes fscanf en un seul
Marsh Posté le 13-12-2002 à 21:36:13
bonjour
je débute en C (je connais bien le php mais niveau déclarations de variables c'est pas ca ) et j'ai un probleme dans la déclaration d'un tableau qui est sensé avoir une taille rentrée par les soins de l'utilisateur du programme. Voici mon code source :
erreurs :
config.c: In function `main':
config.c:11: parse error before `int'
config.c:12: warning: passing arg 1 of `printf' makes pointer from integer without a cast
quelqu'un peut m'aider ?