Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1322 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Erreur dans un programme basique en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur dans un programme basique en C

n°1833848
thesunrise
Posté le 04-01-2009 à 21:47:43  profilanswer
 

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. }

mood
Publicité
Posté le 04-01-2009 à 21:47:43  profilanswer
 

n°1833852
sligor
Posté le 04-01-2009 à 22:02:30  profilanswer
 

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

n°1833886
thesunrise
Posté le 04-01-2009 à 23:42:56  profilanswer
 

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
n°1833888
sligor
Posté le 04-01-2009 à 23:48:04  profilanswer
 

verifie ta ligne 12 ;)


Message édité par sligor le 04-01-2009 à 23:48:18
n°1833894
billgatesa​nonym
Posté le 05-01-2009 à 01:03:30  profilanswer
 

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.

n°1833924
Joel F
Real men use unique_ptr
Posté le 05-01-2009 à 09:55:35  profilanswer
 

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.
 

n°1834232
thesunrise
Posté le 05-01-2009 à 19:54:58  profilanswer
 

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?

n°1834249
billgatesa​nonym
Posté le 05-01-2009 à 20:31:51  profilanswer
 

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.

n°1834274
Joel F
Real men use unique_ptr
Posté le 05-01-2009 à 21:52:23  profilanswer
 
n°1834359
thesunrise
Posté le 06-01-2009 à 08:22:16  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Erreur dans un programme basique en C

 

Sujets relatifs
[C] Interrompre une fonction qui attend une action utilisateur[C] Parcourir un fichier
Inserer de la gestion de donnees via SQL dans du code C[C - Gros débutant] Probleme de variable ...
Equivalent en C# pour sérialiser une structure. (Envoi par le réseau)[C] Login password en console
Pause dans programme pour faire une actionerreur d'execution 424
[C# - VB.NET - SQL] arrondir un prix (sans virgule)!Erreur de truncate
Plus de sujets relatifs à : Erreur dans un programme basique en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR