
| Page Précédente 1 2 3 4 5 6 Suivante | |||||||
| Pseudo | Commentaire | ||||||
|---|---|---|---|---|---|---|---|
| Page Précédente 1 2 3 4 5 6 Suivante | |||||||
Jonyboss
|
# Posté le 30/04/2009 à 22:15:26 | ||||||
![]()
|
Salut à tous! Déjà merci pour ces bons tutos toujours aussi clairs! Mais, j'ai comme qui dirait un léger bug qui me chagrine et je ne sait même pas pourquoi il me dit ça Mon bug en fait c'est que Code::Block me dit que la fonction a déjà été définie ailleurs... J'ai donc fait un nouveau programme pour trouver mon erreur (pour pouvoir réutiliser la solution ailleurs). Je vous montre mes différents fichiers : Tout d'abord : ma page main.c : Code : C
Ensuite : ma page tests.h Code : C
(elle reste certe très simple )et enfin : ma page tests.c : Code : C
et l'erreur se situe au niveau de la première accolade du fichier test.c où Code::Block me dit "multiple definition of '_addition'" et sur la ligne suivante il me dit fièrement "first defined here" en m'indiquant l'accolade... Et donc? où est l'erreur? Quand je regroupe tout ces fichier dans le main.c, ça passe impec... qu'est-ce qu'il se passe? Je suis un peut dans le floue à vrai dire, quelqun peut m'aider?
|
||||||
CO2
|
# Posté le 04/05/2009 à 22:20:31 | ||||||
|
|
enlève les directives de prépocesseur de ton "test.c"
|
||||||
Jonyboss
|
# Posté le 05/05/2009 à 17:15:33 | ||||||
![]()
|
Nop ça me donne toujours la même erreur ![]() Toujour ce "multiple definition of '_addition'" avec un petit "first defined here" montrant la premiere accolade
|
||||||
CeB68
|
# Posté le 05/05/2009 à 23:44:12 | ||||||
![]()
|
Bonjour M@teo, je te passe les compliments mais je n'en pense pas moins...Une chose me turlupine =D...C'est pas plus logique de déclarer les fonctions dans le fichier.h, et de mettre les prototypes dans le main.c après les directives du préprocesseur ? Ca allège le code source et ça marche ^^...Quelles problèmes ca peut causer ? Est-ce qu'il est important de déclarer dans le .h ? Est-ce qu'on peut créer "Fonctions.c" et l'inclure après avoir déclarer les fonctions dedans ? Merci d'avance
|
||||||
CeB68
|
# Posté le 05/05/2009 à 23:48:06 | ||||||
![]()
|
Même erreur que Jony lorsque j'ajoute une fichier source fonctions.c et que je déclare les fonctions dedans... | ||||||
buz13
|
# Posté le 09/05/2009 à 13:55:27 | ||||||
|
time is money
|
voila moi j'ai un problème, voila mes deux fichier codes sources j'ai un fichier avec des fonction dedans mais lorsque je met #include "fonction.c" dans la main ca me met erreur plusieur valeur definies un truc dans le genre et quand je met pas #include "fonction.c" tout fonctionne tres bien... c'est normal? |
||||||
Jonyboss
|
# Posté le 10/05/2009 à 14:50:19 | ||||||
![]()
|
![]() Je croi que j'ai comprit :s En faite, tout comme Code::Blocks ajoute le system("PAUSE"); automatiquement à la fin du main.c, je pense qu'il fait ça aussi pour les includes! En faite à chaque fichier que code::blocks voit lors de la compilation il ajoute à chaque fois un include du fichier! ce qui fait que si on le fait nous même (de l'inclure dans le main.c) il va y avoir deux fois le même fichier d'inclu! (le notre avec la directive qu'on fait nous, et celui que code::blocks a include automatiquement!) Résultat, la fonction est définie deux fois (puisqu'elle est incluse deux fois). C'est pour cela que quand on enlève les directives d'include notre programme marche... Bref, j'èspere vous avoir aider (moi oui )@++ ![]() PS : Je vous dirait si je trouve un truc pour enlever cet automatisme
|
||||||
Keyes
|
# Posté le 10/05/2009 à 16:06:36 | ||||||
![]()
|
Bonjour, Je suis assez réticent sur le fait qu'il faille obligatoirement mettre les fonctions utilisées par main avant celle-ci. Ceci n'est pas logique car lorsque l'on compile, l'ordre n'a aucune importance. Moi-même, je programme en mettant toujours la fonction principale (main) avant toutes les autres, et cela ne me pose aucun problème. |
||||||
Keyes
|
# Posté le 10/05/2009 à 16:56:00 | ||||||
![]()
|
Excusez-moi. Faites comme si je n'avais rien dit. | ||||||
Nico007
|
# Posté le 21/05/2009 à 11:42:40 | ||||||
|
|
Bonjour à vous, maîtres de la programmation !!! Jusque là, je comprenais tous, mais là, je dois avouer que je n'ai...rien compris Je voudrais savoir s'il était possible de faire #include"viveLeSiteDuZero.c"; dans lequel on aurait écrit toutes les fonctions nécessaires, au lieu de créer un fichier.h (dont je ne comprend pas l'utilité). En espérant recevoir une réponse sans que l'on recopie tout le tuto , merci !!!
|
||||||
musician-rider
|
# Posté le 24/06/2009 à 11:58:10 | ||||||
..............................![]()
|
Tout d'abord bravo pour ce tuto magnifique, je n'ai pas remercié depuis le début, donc je profite pour le faire ![]() Bref j'ai eu besoin de la programmation modulaire pour les petits exos sur les tableaux, et j'ai bloqué au moment d'afficher mes différentes fonctions qui étaient dans un fichier .c séparé. Mais j'ai enfin trouvé mon erreur C'est juste que je n'avais pas compris que la programmation modulaire marche comme ça :Dans tableaux.h (contenant les prototypes de mes fonctions): Code : C
Ensuite dans tableaux.c(contenant mes fonctions) : Code : C
Jusque là j'avais tout bon, mais c'était pour utiliser mes fonctions dans main.c que je ne trouvais pas Mais après plusieurs tests acharnés, j'ai enfin trouvé Voici donc mon main.c : Code : C
Et voilà ce que je ne trouvais pas! comment inclure les fonctions d'un autre .c dans le main! Mais enfin j'ai trouvé, et je suis bien content Bref tout ça pour féliciter m@teo, et pour peut-être en débloquer certains (euh... je suis le seul à avoir bloqué sur ceci? )Un petit 20 car tu le mérites amplement
if(programmeur_sadique){moi=1;} Musicien, poète, gamer, programmeur, presque webmaster, écrivain, et lycéen à ses heures perdues |
||||||
Vauclerc
|
# Posté le 24/06/2009 à 16:13:05 | ||||||
|
|
sauf erreur de ma part les enfants, on n'inclut pas de fichier .c dans les instructions de pré-processeur, seulement les fichiers prototype relatifs au fonctions susceptibles d'être appelées. Je ne sais pas si le fait d'appeler un fichier .c est pris en compte, mais il ne faut pas vous étonner de rencontrer une erreur de définitions multiples si vous incluez plusieurs fois la même chose. |
||||||
musician-rider
|
# Posté le 24/06/2009 à 21:00:40 | ||||||
..............................![]()
|
Moi personnellement (je suis sous code::blocks) sans cette directive de préprocesseur #include"tableaux.c", mon programme plante. En effet il m'a paru bizarre d'inclure le .c mais je n'ai pas le choix, je ne vais pas laisser mon programme planter juste pour ça
if(programmeur_sadique){moi=1;} Musicien, poète, gamer, programmeur, presque webmaster, écrivain, et lycéen à ses heures perdues |
||||||
shadorak
|
# Posté le 27/06/2009 à 15:48:59 | ||||||
|
Ville : Chatou |
Bonjour, Je suis également sous code:blocks et il me faut inclure le fichier en .c au lieu du header correspondant afin d'avoir un programme fonctionnel. Est-ce normal ? Cela va-t-il être génant pour la suite du tutoriel ? Peut-être que code:blocks s'adapte ensuite et remplace par le header ... ? Voilà en tout cas les deux erreurs affichées par code:blocks lors du debug (si j'inblus le header et non le fichier en .c) : ligne de la première accolade qui indique le début du "contenu" de la fonction main : "erreur: expected '=' , ',' , ';' , 'asm' or '__attribute__' before '' token" ligne de l'accolade indiquant la fin de la fonction main (après le return0) : "erreur: expected '{' at end of input" Quelqu'un sait ce qu'il faudrait faire ? S'il faut bien mettre le .c plutôt que le .h (je ne veux pas juste avoir un programme qui marche mais plutôt un programme bien écrit afin de bien poursuivre le cours ...)? S'il faut faire une autre manipulation ? Voici le détail du programme : fichier main.c #include <stdio.h> #include <stdlib.h> #include "fonctions.h" int main() { long nombre = 2000; long continuerprogramme = 1; printf("Programme 1\n\n"); do { fonctionchoisie(nombre); nombre = fonctionchoisie(nombre); printf("%ld\n\n", nombre); printf("continuer (O pour non, autre nombre pour oui) ?\n"); scanf("%ld", &continuerprogramme); }while (continuerprogramme!= 0); printf("Fin du programme"); return 0; } fichier fonctions.c : #include <stdio.h> #include <stdlib.h> long fonctionchoisie (long nombre) { nombre = nombre + 1; return nombre; } fichier fonctions.h : #ifndef FONCTIONS_H_INCLUDED #define FONCTIONS_H_INCLUDED long fonctionchoisie (long nombre1) #endif // FONCTIONS_H_INCLUDED Bonne journée, |
||||||
shadorak
|
# Posté le 27/06/2009 à 15:51:06 | ||||||
|
Ville : Chatou |
Je précise que j'utilise code:clocks sous ubuntu (ce qui explique l'absence se system pause) | ||||||
shadorak
|
# Posté le 27/06/2009 à 16:02:03 | ||||||
|
Ville : Chatou |
En cherchant un peu, je me suis apperçu que j'avais oublié un ";" à la fin du prototype dans le header ... (*honteux*) Cependant, maintenant que j'ai corrigé ce problème, (j'ai également enlevé la première ligne à l'intérieur de "do" dans la fonction main qui était de trop), il me signale une autre erreur : undefined reference to fonctionchoisie ... je ne comprends pas : j'ai pourtant bien mis le prototype dans le header ... |
||||||
shadorak
|
# Posté le 27/06/2009 à 16:06:54 | ||||||
|
Ville : Chatou |
j'ai lu sur un forum que faire #include "le_nom_d_un_fichier" revenait à copier le contenu de ce fichier à l'emplacement du include ... Je comprends l'intérêt d'avoir des fonctions réparties dans plusieurs fichiers pour conserver un minimum d'ordre mais si ce que j'ai lu est vrai, pourquoi utiliser des headers ? Quelle utilité ont-ils ? |
||||||
shadorak
|
# Posté le 27/06/2009 à 16:18:12 | ||||||
|
Ville : Chatou |
En cherchant sur les forums concernant le C++, je viens de me rendre compte que je n'avais pas coché les cases "Debug" et "Release" en créant le fichier fonctions.c avec code:blocks. J'ai donc recréé le fichier en cochant bien et là tout marche nickel. Pour ceux qui avaient le même problème que moi :plusieurs points à vérifier : ayez bien un ; à la fin du prototype dans le header incluez bien le header dans le fichier.c correspondant et celui qui appelle une fonction du fichier.c cochez debug et release lorsque vous créez vos fichiers sous Code:Blocks. Bonne journée, |
||||||
Mi@maths
|
# Posté le 04/07/2009 à 14:18:34 | ||||||
![]()
|
Salut ! Une question .... J'ai jamais compris pourquoi on devait mettre un " return " a la fin de chaque programme je sais, je sais.... vous allez me dire "Ta qu'a regarder le tuto il te le dira idiot" mais j'ai regarder plusieurs fois et... je n'ai vu que la raison avec le "return 0" PS: Cette question et vraiment essentielle pour moi car a cause de celle ci j'ai arrêter d'apprendre le Java et me C
|
||||||
kayma
|
# Posté le 06/07/2009 à 14:04:39 | ||||||
![]()
|
Bonjour, j'ai testé le programme de matéo sur les pointeurs (celui qui renvoie les heures et les minutes), mais en testant les variables globales. Mais, je n'arrive pas à faire marcher le programme, bizarrement les variables globales ne sont pas modifiées.... Voici mon programme, j'espère avoir quelques suggestions: #include <stdio.h> #include <stdlib.h> long hour = 0, min = 90; void decoupeMinutes(long heures, long minutes); int main(int argc, char *argv[]) { decoupeMinutes(hour, min); printf("%ld heures et %ld minutes\n", hour, min); return 0; } void decoupeMinutes(long heures, long minutes) { heures = minutes / 60; // 90 / 60 = 1 minutes = minutes % 60; // 90 % 60 = 30 (rappelez-vous : modulo = reste de la division, "90 divisés par 60 font 1, et il reste 30") } En même temps, je voudrai attirer votre attention au fait que le même programme sans arguments marche bien? Pourquoi? Le programme est le suivant : #include <stdio.h> #include <stdlib.h> long heures = 0, minutes = 90; void decoupeMinutes(); int main(int argc, char *argv[]) { decoupeMinutes(); printf("%ld heures et %ld minutes\n", heures, minutes); return 0; } void decoupeMinutes() { heures = minutes / 60; minutes = minutes % 60; } |
||||||
Swodinw
|
# Posté le 16/07/2009 à 01:21:16 | ||||||
Have Fun :D![]()
|
Relis le chapitre sur les Pointeurs ... x)
Have Fun |
||||||
Kiron
|
# Posté le 17/07/2009 à 20:05:14 | ||||||
Tout est relatif, c'est absolu![]()
Ville : Phalsbourg |
Salut les Zér0s! ![]() J'ai essayé d'améliorer mon "Plus ou Moins" en me servant de la programmation modulaire mais quand j'inclus une fonction "void" dans "main.c" il bugge systématiquement à la compil en me disant que je dois réctifier mes paramètres. Pourtant j'ai vérifié, j'ai bien mis "#incluse..." et tout et tout... Quelqu'un pourrait-il m'aider? Voici la ligne de code en quesion : ... void compareNombre(nombreMystere, nombreEntre, MIN, MAX, pointeurNombreCoups); ... Pité! Aidez-moi! Sinon je fraasse mon ordi contre le mur!!! Merci d'avance! Kiron
|
||||||
Kiron
|
# Posté le 18/07/2009 à 10:58:34 | ||||||
Tout est relatif, c'est absolu![]()
Ville : Phalsbourg |
Salut Mi@maths! ![]() La réponse à ta question est simple : comme tu as dû le voir dans le chapitre sur la programmation modulaire, quand tu envoies une valeur (par exemple 3) à une fonction (mettons la fonction "triple") cette fonction doit te renvoyer un résultat (ici c'est 9 car le triple de 3 c'est 9). En gros on a ça : ![]() 3 ===> triple ===> 9 Mais une fonction ne renvoie pas une valeur toute seule. ![]() Il faut que tu lui demande de renvoyer le résultat (ici 9)... Et c'es à ca que sert le return! ![]() Voilà donc ta fonction : int triple(int nombre) //Nombre = 3 { int resultat = 0; resultat = nombre*3; return resultat; } Mais à quoi sert le return 0 de main.c? C'est tout bête! La fonction main.c n'a rien n'a renvoyer (vu que c'est à elle qu'on renvoye des valeurs avec des "return" ) mais pour que ton ordinateur sache que le programme soit fini tu dois lui renvoyer une valeur.Main.c renvoye donc 0 (Pourquoi 0? Ca je n'en sais rien mais ca n'a pas d'importance ) !!! J'éspère avoir répondu à ta question. Amicalement, Kiron
|
||||||
21did21
|
# Posté le 22/07/2009 à 12:21:51 | ||||||
|
|
j'ai un gros probleme avec un programme de programmation modulaire: voici mes fichiers, j'ai essayer de ne pas utiliser plusieurs fichiers et ca fonctionne, c'est lorsque je fait un fichiers .h et .c que ca ne fonctionne plus. -------------main.c--------------------------------- #include <stdio.h> #include <stdlib.h> #include "fichier.h" int main() { double nb1 = 0, nb2 = 0, resultat = 0; int condition = 0; while (condition > 1 || condition < 1) { printf("salut mec!\n rentre un nombre\n\n"); scanf("%lf", &nb1); printf("un deuxieme\n\n"); scanf("%lf", &nb2); resultat = addition (nb1, nb2); condition = resultat >= 50; } printf(" %f est bien superieur à 50 donc OK \n\n", resultat); return 0; } ----------------------fichier.c----------------------------- #include <stdio.h> #include <stdlib.h> #include "fichier.h" double addition (double aaa, double bbb) { double ccc = 0; ccc = aaa + bbb; return ccc; } ---------------------------------fichier.h--------------------- #include <stdio.h> #include <stdlib.h> double addition (double aaa, double bbb); |
||||||
21did21
|
# Posté le 22/07/2009 à 12:23:13 | ||||||
|
|
VOILA L'ERREUR AFFICHEE PAR LE DEBUGGER: - pour la ligne: resultat = addition(nb1, nb2); - il me dit: undefined reference to ' _addition ' <attention> |
||||||
MrWaloo
|
# Posté le 27/07/2009 à 09:46:09 | ||||||
|
|
Dans la partie II, Programmation modulaire, dans la partie des headers. Code : Autre
Une petite faute Code : Autre
|
||||||
rdcf
|
# Posté le 28/07/2009 à 16:01:46 | ||||||
|
|
svp est-ceque quelqu' un pourrait me reexpliquer à quoi sa sert les prototypes(j'ai compris qu'on pouvait entrer les valeur des variables à l'exterieur de la fonction main) merci d'avance | ||||||
thejjb
|
# Posté le 29/07/2009 à 01:37:33 | ||||||
|
|
21did21 j'ai enlevé #include "fichier.h" qui était dans fichiers.h (j'ai aucune idéé pourquoi t'a apelé ton .header dans ton header )j'ai simplifié ta fonction je la trouve plus jolie comme ça mais elle marchait tres bien comme toi tu l'avais tapée. désolé si j'ai changé certains noms et fais gaffe a ne pas confondre fonctions2.c et fonctions.h. -----main.c----- Code : C
-----fonctions2.c----- Code : C
----fonctions.h----- le fameux headerCode : C
De rien thejjb |
||||||
Arrows
|
# Posté le 12/08/2009 à 16:02:44 | ||||||
|
|
@ kayma, Salut, alors en premier, dans ton exemples sans arguments, c'est normal que tout fonctionne même si c'est pas un code très "beau", le fait de déclarer tes variables en globales te permet d'y accéder de n'importe où, ta fonction peut y avoir accès, mais comprends bien que elle ne les connais pas parce-que tu lui a dit lesquelles il devais utiliser, juste parce qu'il les connais d'avant. sinon, le problème que viennent résoudre les pointeurs est tout autre, si tu déclare tes variables dans une fonction (main, ou autre... ), seule cette fonction sais qu'elles existent, donc tu est obligé de transmettre leurs valeurs à la fonction qui va faire le calcul, celle-ci, au lieu d'utiliser les variables existantes en fait des copies, donc toutes modifications dessus se perd à la fin de la fonction, l'ordinateur comprenant, "c'est la fin de la fonction, ces variables sont déclarés pour n'être connue que dans cette fonction, donc je n'en ai plus besoin.", il les effaces. @21did21 && thjjb : Juste comme ça, il me semblais que certaines de vos expressions étaient un peu "a rallonge" et comme on est là pour apprendre je me permet de vous simplifier cette ligne (^^) il me semble que l'on peut remplacer : (condition > 1 || condition < 1) par (condition != 1) Sinon il y a autre chose qui me chagrine c'est l'utilisation même de la variable booléenne "condition", ta boucle pourrais tester directement (resultat < 50) non ? |
||||||
royeur
|
# Posté le 17/08/2009 à 12:36:07 | ||||||
|
|
Bonjour. Je ne savais pas où l'écrire alors je le poste ici: Ce site est géniale et ce tuto sur le C et C++ est excellent |
||||||
Le Site du Zéro vous proposera bientôt de nouveaux cours partant de Zéro dans d'autres domaines que l'informatique !

