Se connecter / S'enregistrer
Votre question
Fermé

Votre avis sur LA BIBLE DU PROGRAMMEUR C/C++/C#

Tags :
  • Undefined
  • Programmation
Dernière réponse : dans Programmation
23 Octobre 2005 16:55:07

Bonjour à tous.

Comme l'indique le topic je voudrais un avis pour se livre je vous explique pourquoi.

J'ai acheté se livre depuis 1 mois environ je le lis donc avec attention ( Je le trouve très bien d'ailleurs ) jusqu'au moment ou j'ai eu un petit problème dans un script ou j'ai un message d'erreur à cause de "system" Voici l'erreur:

"Undefined symbol_system in module"

à la ligne suivante:

system("DIR");

Je pensais qu'il me manquait tout simplement une librairie j'ai donc demander conseil (J’utilise Turbo C++ comme le conseille le livre) j'ai donc montrer le code du livre, et à ma grande surprise de nombreuses personnes m'on dit que le code à de très nombreuses erreurs et que ce n'est pas du tout comme ça que l'on code.


Il m'a conseillé alors un autre compilateur ( DevC++) j'ai donc testé le code à tout hasard et DevC++ trouve des erreurs que TurboC++ ne m'a jamais dite, dans tout les programmes du livre alors que tout les programmes que j'ai fais avec TurboC++ on toujours très bien marcher et le plus étrange c'est que dans TurboC++ les programmes marchent très bien la seul différence c'est qu' il s'affiche dans une fenetre dos blanche alors que dans DevC++ le programme s'affiche dans une fenetre MSDOS(sur fond noir classique ) et il ne réagit pas de la même facon exemple il n'affiche pas certaine fonction comme "printf" alors que dans TurboC++, si comme l'a dis le livre.

Voilà, tout ça pour dire que je suis assez perdu je me demande si j'ai pas appris pour rien, et je voudrais l'avis des personnes qui on acheté se livre et les autres aussi à tout hasard je vous donne le code qui à déclenché le problème le seul code que TurboC++ n'a pu compiler à cause de "system"

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5.  
  6. void main(void)
  7. {
  8. char lettre;
  9.  
  10. do
  11. {
  12. printf("A affiche la liste des répertoires\n");
  13. printf("B Modification dee l\'heure systeme\n");
  14. printf("C Modifcation de la date système\n");
  15. printf("Q Quitter\n");
  16. printf("Votre choix: ");
  17.  
  18. lettre = getch();
  19. lettre = toupper(lettre);
  20.  
  21.  
  22. if (lettre == 'A')
  23. system("DIR");
  24. else if (lettre == 'B')
  25. system("TIME");
  26. else if (lettre == 'C')
  27. system("DATE");
  28. }
  29. while (lettre != 'Q');
  30.  
  31. }

Autres pages sur : avis bible programmeur

a b L Programmation
23 Octobre 2005 17:26:32

La fonction system se trouve normalement dans stdlib.h, alors regarde s'il est présent dans ce fichier.

Pour ce qui est du code, il n'y que la fonction main qui peut poser problème sur certains compilateurs, mais il suffit de remplacer le premier void par int.
Le contenu du code est correct.

Sinon j'aimerai bien voir le code de ceux qui disent qu'on ne code pas comme ça... parce que à part l'absence de commentaire, ce code est très bien.
23 Octobre 2005 17:33:23

Le code qui était mal codé d'après se que l'on m'a dis s' était celui que j'ai donné.

Certain include comme #include <conio.h> ne doit pas être mis dans le code et qu'il manque également un RETOUR EXIT SUCESS à la fin du code.( Je ne me souviens plus exactement de la syntaxe )

PS: Ca fait plaisir d'entendre se que tu as dis car d'après les autres personnes je devais changé de livre si je ne voulais pas nagé.

PS2: Pourquoi le void doit être changé ? tout les programmes de Kris Jamsa commence comme ça ( l'auteur du livre ) pour quelle raison c'est faux ? c'est assez énorme non une erreur dans se genre de livre.

PS3: Turbo C++ est-il à évité? Il n'a pas vue l'erreur de main.

Pour le code aussi que je t'avais dis (Pour printf)
C'est celui si:
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <conio.h>
  4.  
  5. void main(void)
  6. {
  7. char lettre;
  8. printf("Voulez vous continuer ? (O/N): ");
  9.  
  10. lettre = getch(); // Capturer la lettre
  11. lettre = toupper(lettre);
  12.  
  13. while ((lettre !='O') && (lettre != 'N'))
  14. {
  15. putch(1);
  16. lettre = getch();
  17. lettre = toupper(lettre);
  18. }
  19. printf("\nVotre réponse était : %c\n", lettre);
  20. }


Avec TurboC++ quand on lance le programme il donne une fenetre sur fond blanc qui comme le montre le code attend que l'utisateur appuis sur O ou N, puis envoie avec printf le text en signalant la touche que j'utilisateur à appuyer.

Alors qu'avec DevC++ après que l'utilisateur appuis sur la touche voulu la fenetre se ferme également et autre problème ( car c'était le but de la leçon du livrep pour se code c'est que si la personne appuis sur une autre touche un son est envoyé hors avec DevC++ se n'est pas le cas a la place quand l'utilisateur appuis sur la touche ça écris un caractère.
a b L Programmation
23 Octobre 2005 17:46:17

Je suis désolé, mais le contenu de la fonction main est bien codé. Par exemple, la présence du do...while au lieu du simple while est justifié ici.
Tu devrais demander pour il ne faut pas coder comme ça parce que moi je ne voit pas.
J'ai vu de nombreux style de programmation, il y a une question de gout, le principal est qu'il soit facilement compréhensible à la relecture. Ici c'est le cas.

si turbo c++ accepte des fonction avec retour void, il n'y a pas de return à mettre, si elle retourne un int, là oui il faut mettre un return 0; à la fin.

Je dis ça parce que la norme C89 oblige le int en retour. Donc pour rester dans toutes les normes, mieux vaut faire:
int main ( void )
ou
int main ( int argc, char *argv[] )
pour du code C

Les includes en trop ne servent à rien, mais ne posent pas de problème, je n'ai pas lu ce livre mais je pense qu'il a mis les même includes partout, pour ne pas se soucier de ce problème et n'apprendre que la structuration du code C lui-même.

Au moins, ce bouquin montre qu'il n'y a pas de programmation parfaite.
23 Octobre 2005 17:59:01

Merci, je prends note alors pour ne plus mettre void main(void) tout simplement en le remplacant par int void(void). :) 

Pour les includes,l'auteur ne met les includes seulement s'elles sont nécéssaires car suivant les codes elles varient.

En tout cas ca me rassure.

Par contre pour l'include STDLIB.H

J'ai trouvé ça:

int _RTLENTRY _EXPFUNC system(const char _FAR *__command);

En modifiant le Int par void le code marche dans DevC++ alors peut être que TurboC++ est trop vieux aller savoir ...
23 Octobre 2005 18:24:22

Bon, et bien je m'appercoi que tout les codes avec DevC++ se lance et se ferme instatanément( sauf quand il attend que l'utilisateur presse une touche comme le premier code ) je peux vous dire que c'est agassant quand on vous explique quelque chose qui n'est pas bon si vous pourriez m'expliqué pourquoi se serais très sympa je vous donne encore un exemple de code qui s'affiche et se ferme sans que l'on puisse rien voir.
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int age = 10;
  6. int possede_chien = 0; // 0 signifie faux
  7.  
  8. if (age == 10)
  9.  
  10. {
  11. printf("Les chiens sont des compagnons pr‚cieux.\n");
  12. if (! possede_chien)
  13. printf("Pourquoi ne pas adopter un dalmatien ?\n");
  14. }
  15. printf("Heureux dalmatien !\n");
  16.  
  17. }
23 Octobre 2005 18:25:20

Bon, et bien je m'appercoi que tout les codes avec DevC++ se lance et se ferme instatanément( sauf quand il attend que l'utilisateur presse une touche comme le premier code ) je peux vous dire que c'est agassant quand on vous explique quelque chose qui n'est pas bon si vous pourriez m'expliqué pourquoi se serais très sympa je vous donne encore un exemple de code qui s'affiche et se ferme sans que l'on puisse rien voir.
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int age = 10;
  6. int possede_chien = 0; // 0 signifie faux
  7.  
  8. if (age == 10)
  9.  
  10. {
  11. printf("Les chiens sont des compagnons pr‚cieux.\n");
  12. if (! possede_chien)
  13. printf("Pourquoi ne pas adopter un dalmatien ?\n");
  14. }
  15. printf("Heureux dalmatien !\n");
  16.  
  17. }


Merci.
23 Octobre 2005 18:26:01

Bon, et bien je m'appercoi que tout les codes avec DevC++ se lance et se ferme instatanément( sauf quand il attend que l'utilisateur presse une touche comme le premier code ) je peux vous dire que c'est agassant quand on vous explique quelque chose qui n'est pas bon si vous pourriez m'expliqué pourquoi se serais très sympa je vous donne encore un exemple de code qui s'affiche et se ferme sans que l'on puisse rien voir.
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int age = 10;
  6. int possede_chien = 0; // 0 signifie faux
  7.  
  8. if (age == 10)
  9.  
  10. {
  11. printf("Les chiens sont des compagnons pr‚cieux.\n");
  12. if (! possede_chien)
  13. printf("Pourquoi ne pas adopter un dalmatien ?\n");
  14. }
  15. printf("Heureux dalmatien !\n");
  16.  
  17. }


Merci.
23 Octobre 2005 18:43:15

Salut, c'est normal que ça se coupe, une fois qu'il a finit, il coupe ^^
Essaye avec ça ...
  1. #include <stdio.h>
  2. #include <stdlib.h> // Permet d'utiliser la fonction system()
  3.  
  4. int main(void)
  5. {
  6. int age = 10;
  7. int possede_chien = 0; // 0 signifie faux
  8.  
  9. if (age == 10)
  10.  
  11. {
  12. printf("Les chiens sont des compagnons pr‚cieux.\n");
  13. if (! possede_chien)
  14. printf("Pourquoi ne pas adopter un dalmatien ?\n");
  15. }
  16. printf("Heureux dalmatien !\n");
  17.  
  18. system("pause"); // Permet de stopper le programme, donc ici juste avant qu'il ne se coupe...
  19. }

@++++
23 Octobre 2005 19:00:32

Pourtant avec TurboC++ ca ne coupé pas.

Le problème c'est que ca s'affiche éffectivement mais le code ne marche pas comme l'auteur la prévu.

Je m'explique:

Normalement si la variable age est égale à 10 Printf s'exécute
"printf("Les chiens sont des compagnons précieux.\n");"

Si elle n'est pas égale
printf("Pourquoi ne pas adopter un dalmatien ?\n"); Doit s'affiché.

Hors se n'est pas du tout le cas :/  tout s'affiche, si je dois refaire chaque code que j'ai appris dans se livre je commence vraiment à me poser des questions sur se livre pourtant il était conseillé dans pas mal de forum.
Merci pour votre aide.
a b L Programmation
23 Octobre 2005 19:10:23

C'est turbo C++ qui gradait ouvert, si tu exécute le programme compilé sans utiliser l'interface de développement, c'est le comportement de Dev-C++ que tu dois avoir.
sinon tu lance une console DOS, tu tape ton programme et ça ne quittera pas, mais c'est pas pratique, alors autant mettre le system("pause") ;-)

EDIT pour le chien:
le test de la question est dans le if (age == 10)
donc la question est posées si age==10 ET que possede_chien est à faux.
12 Mai 2008 01:29:02

Bonjour...
Y'a t-il moyen de se procurer le livre "La Bible du programmeur" de Kris Jamsa sur internet en téléchargement gratuit...

Merciii...
12 Mai 2008 11:14:29

non.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS