Erreur dans un programme basique en C

Erreur dans un programme basique en C - C - Programmation

Marsh Posté le 04-01-2009 à 21:47:43    

Bonjour j'apprends à programmer en C grâce à un livre "Le langage C" de chez Pearson, il y' a dans ce livre un code qui ne fonctionne pas lorsque je le compile mais je ne  comprends pas à quoi c'est dû, j'espère que vous pourrez m'éclairer:
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define QUIT 3
  4. void choix_menu(void);
  5. int affiche(void);
  6. int main()
  7. {
  8. int choix = 0;
  9. while(choix != QUIT);
  10. {
  11. choix = choix_menu();
  12. if(choix == 1)
  13.  printf("\nL'ordinateur va biper\a\a\a" );
  14. else
  15.  {
  16.  if(choix == 2)
  17.   affiche();
  18.  }
  19. }
  20. printf("Vous avez choisi de sortir!\n" );
  21. exit(EXIT_FAILURE);
  22. }
  23. int choix_menu(void)
  24. {
  25. int selection = 0;
  26. do
  27. {
  28.  printf("\n" );
  29.  printf("\n1 - Bip ordinateur" );
  30.  printf("\n2 - Affichage " );
  31.  printf("\n3 - Sortir " );
  32.  printf("\n" );
  33.  printf("\nEntrez votre choix :" );
  34.  scanf("%d", &selection);
  35. }while (selection < 1 || selection > 3);
  36. return selection;
  37. }
  38. void affiche(void)
  39. {
  40. printf("\nExemple d'affichage" );
  41. printf("\n\nOrdre\tSignification" );
  42. printf("\n======\t=============" );
  43. printf("\n\\a\t\tsonnerie " );
  44. printf("\n\\b\t\tretour arrière" );
  45. printf("\n...\t\t..." );
  46. }

Reply

Marsh Posté le 04-01-2009 à 21:47:43   

Reply

Marsh Posté le 04-01-2009 à 22:02:30    

ce code ne compile pas sers toi des messages d'erreur ou demande explicitement ce que tu ne comprends pas [:spamafote]

Citation :


$gcc test.c -o test
test.c: In function ‘main’:
test.c:15: error: void value not ignored as it ought to be
test.c: At top level:
test.c:29: error: conflicting types for ‘choix_menu’
test.c:6: error: previous declaration of ‘choix_menu’ was here
test.c:49: error: conflicting types for ‘affiche’
test.c:7: error: previous declaration of ‘affiche’ was here

Reply

Marsh Posté le 04-01-2009 à 23:42:56    

en fait j'ai  fait une petite erreur en publiant le code c'est "int choix_menu(void);" au lieu de "void choix_menu(void);" et même erreur pour "affiche" mais ça ne résout pas mon problème car le code se compile sans erreur mais le programme n'affiche rien.

 

voici le code corrigé

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define QUIT 3
  4. int choix_menu(void);
  5. void affiche(void);
  6. int main()
  7. {
  8. int choix = 0;
  9. while(choix != QUIT);
  10. {
  11. choix = choix_menu();
  12. if(choix == 1)
  13.  printf("\nL'ordinateur va biper\a\a\a" );
  14. else
  15.  {
  16.  if(choix == 2)
  17.   affiche();
  18.  }
  19. }
  20. printf("Vous avez choisi de sortir!\n" );
  21. exit(EXIT_FAILURE);
  22. }
  23. int choix_menu(void)
  24. {
  25. int selection = 0;
  26. do
  27. {
  28.  printf("\n" );
  29.  printf("\n1 - Bip ordinateur" );
  30.  printf("\n2 - Affichage " );
  31.  printf("\n3 - Sortir " );
  32.  printf("\n" );
  33.  printf("\nEntrez votre choix :" );
  34.  scanf("%d", &selection);
  35. }while (selection < 1 || selection > 3);
  36. return selection;
  37. }
  38. void affiche(void)
  39. {
  40. printf("\nExemple d'affichage" );
  41. printf("\n\nOrdre\tSignification" );
  42. printf("\n======\t=============" );
  43. printf("\n\\a\t\tsonnerie " );
  44. printf("\n\\b\t\tretour arrière" );
  45. printf("\n...\t\t..." );
  46. }


Message édité par thesunrise le 04-01-2009 à 23:48:37
Reply

Marsh Posté le 04-01-2009 à 23:48:04    

verifie ta ligne 12 ;)


Message édité par sligor le 04-01-2009 à 23:48:18
Reply

Marsh Posté le 05-01-2009 à 01:03:30    

Bien vu pour la ligne 12 !
 
Par ailleurs, il recommandé de mette le main à la fin, parce que cela permet d'éviter l'écriture de prototypes, et surtout car c'est la convention adoptée universellement.

Reply

Marsh Posté le 05-01-2009 à 09:55:35    

billgatesanonym a écrit :

Par ailleurs, il recommandé de mette le main à la fin, parce que cela permet d'éviter l'écriture de prototypes, et surtout car c'est la convention adoptée universellement.


 
La convention quand tu écris comme un porc.
Compilation séparée et rulez.
 

Reply

Marsh Posté le 05-01-2009 à 19:54:58    

merci beaucoup sligor et billgate, en effet il était pas évident de remarquer le ; en trop ligne 12, au fait pourquoi le compilateur ne m'a pas renvoyé d'erreur?, tolérance de la fonction while?
 
Joel qu'entends-tu par compilation séparée?

Reply

Marsh Posté le 05-01-2009 à 20:31:51    

Un point virgule seul est une instruction valable en C. Cette instruction ne fait rien, donc on ne s'en sert pas très souvent, mais elle existe quand même.
 
Le while doit être suivi, soit d'un bloc entre accolades, soit d'une instruction. C'est la deuxième possibilité qui est prise en compte quand le compilateur voit le point virgule tout seul.
 
Le bloc qui suit le point virgule est considéré comme n'ayant pas de rapport avec le while. Il est possible de mettre des blocs où l'on veut en C, pas forcément derrière un while ou un if.

Reply

Marsh Posté le 05-01-2009 à 21:52:23    

Reply

Marsh Posté le 06-01-2009 à 08:22:16    

merci à vous, vous m'avez bien aidé.

Reply

Sujets relatifs:

Leave a Replay

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