Problème compilation avec Code Blocks

Antology Messages postés 21 Statut Membre -  
Antology Messages postés 21 Statut Membre -
Bonjour,

Je débute en C, et utilise comme programme Code Blocks 8.02.

J'apprends avec un livre dans lequel je dois saisir, compiler, puis exécuter le programme suivant :

/* ex2-5.c */
#include <stdio.h>

int main()
{
char buffer[256];

printf("Entrez votre nom et appuyez sur Entrée:\n");
lire_clavier(buffer, sizeof(buffer));

printf("\nVotre nom contient %d caractères.", strlen(buffer));

exit(EXIT_SUCCESS);
}

------------------

Sachant que ce programme compte puis affiche le nombre de caractères et d'espaces que l'on saisit au clavier.

Le message d'erreur que je reçois est le suivant :

D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c||In function 'main':|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c|9|warning: implicit declaration of function 'lire_clavier'|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c|11|warning: implicit declaration of function 'strlen'|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c|13|warning: implicit declaration of function 'exit'|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c|13|error: 'EXIT_SUCCESS' undeclared (first use in this function)|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c|13|error: (Each undeclared identifier is reported only once|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c|13|error: for each function it appears in.)|
||=== Build finished: 3 errors, 3 warnings ===|

Quelqu'un pourrait-il m'aider ? (Je rappelle que je suis débutant).
Merci.

A voir également:

5 réponses

ghuysmans99 Messages postés 2496 Date d'inscription   Statut Contributeur Dernière intervention   340
 
Essaie d'inclure aussi stdlib.h ...
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Bonjour,
Le compilateur te précise qu'il ne connait pas la fonction fonction lire_clavier. Elle est définie où ?
C'est dommage d'utiliser exit() au lieu de return dans ce cas. Cela t'oblige à inclure stdlib.h
Tu utilises aussi la fonction strlen, il faut donc penser à inclure string.h

Cdlt,
0
Antology Messages postés 21 Statut Membre 8
 
Bonjour,

Tout d'abord je vous remercie pour vos 2 réponses.

J'ai appliqué vos conseils et voici maintenant le code source :

/* ex2-5.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char buffer[256];

printf("Entrez votre nom et appuyez sur Entrée:\n");
lire_clavier(buffer, sizeof(buffer));

printf("\nVotre nom contient %d caractères.", strlen(buffer));

exit(EXIT_SUCCESS);
}

------------------------

Le message d'erreur est devenu :

||=== ex2-5.c, Debug ===|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c||In function 'main':|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c|11|warning: implicit declaration of function 'lire_clavier'|
obj\Debug\main.o||In function 'main':|
D:\MonEspace\Documents\JV - Informatique\Programmation\Exercices programmation C\ex2-5.c\main.c|11|undefined reference to '_lire_clavier'|
||=== Build finished: 1 errors, 1 warnings ===|

Encore un peu d'aide svp ?

Je voudrais dire aussi que j'ai recopié exactement ce qui est écrit dans le livre. Comment se fait-il qu'il ait oublié d'inclure stdlib.h et string.h ?
Et qu'est-ce que leur insertion permet de faire de plus au programme ?
Et qu'en est-il de la fonction lire_clavier qui n'est pas définie ?

Je trouve ça gros qu'il y ait autant d'erreurs et d'oublis dans un livre d'apprentissage du C.

Merci
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Eh oui, le C n'est pas maitrisé non plus par les rédacteurs de livre ^^.
int main()
Le prototype de main sans argument est : int main(void)

exit(EXIT_SUCCESS);
C'est très laid dans la fonction main. On utilise généralement : return EXIT_SUCCESS; ou tout simplement return 0;

printf("\nVotre nom contient %d caractères.", strlen(buffer));
C'est mieux de mettre un \n après le "%d caractères." avant de quitter le programme. Rien ne stipule dans la norme que le flush écran doit avoir lieu avant de quitter le programme.

Sinon t'as pas fait tout ce que je t'ai dit.

Le compilateur te précise qu'il ne connait pas la fonction fonction lire_clavier. Elle est définie où ?
Si tu préfères, la fonction "lire_clavier" n'est pas une fonction reconnue en C. Il faut la créer. Tant que c'est pas le cas, ça marchera pas...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Antology Messages postés 21 Statut Membre 8
 
Merci de continuer à m'aider fiddy.

Mais je suis débutant. Pour l'instant, ce que tu me dis est du charabia.

Quelle différence entre int main() et int main (void) ?
Quelle différence entre exit(EXIT_SUCCESS); et return EXIT_SUCCESS; ou return 0; ?
En quoi est-ce mieux de mettre \n après le %d caractères ?
Que signifie "Rien ne stipule dans la norme que le flush écran doit avoir lieu avant de quitter le programme." ?
Et pour finir, si la fonction lire_clavier n'est pas crée, et bien je ne sais pas comment le faire.

Merci.

PS:(c'est un test)
sdfdgsgsdg
0