FORUM Tom's Hardware » Programmation » C / C++ / Java » Besoin d'aide !!
 

Besoin d'aide !!

141 utilisateurs inconnus
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Besoin d'aide !!
 
Plus d'informations

Bonjours a tous,
 
ma question va p-e vous paraitre stupid mais bon tampis...
Alors j'ecris des programmes en langage C et je les compile grâce a une invite de commande...le programme se lance mais il ne s'éxécute pas jusqu'au bout!  
 
dans 'linvite de commande il y a " appuyer sur une touche pour continuer" et apres la fénetre se ferme... ( je suis sur que mon programme est correct)

Profil : Pointeur
Plus d'informations

change le titre :o
ici tous le monde a besoin d'aide :D

Profil : Pointeur
Plus d'informations

et sinon c'est quoi la question ?
et il est ou le code ?
 
 
a priori tu dois avoir un

Code :
  1. system("PAUSE" );

à la fin :o

Plus d'informations

ben le code n'a pas d'importance puisqu'il est bon et oui j'ai bien mis un  
 
system("PAUSE" );
 
mais dans une l'invite de command mon programme s'éxécute mais il ne va pas jusqu'au bout....(c'est un bete programme de calcularice) j'entre le premier nombre puis le deuxieme et au moment ou je veux entrez un opérateur, il met " appuyer sur une touche pour continuer"

zeb
Profil : Modérateur libre
Plus d'informations

M'enfin, si le programme ne va pas au bout c'est qu'il n'est pas bon !
 
Publie donc ton code, et nous te dirons où !
 
Le message "appuyer sur une touche pour continuer", c'est la commande PAUSE du DOS qui l'affcihe, c'est bien la preuve que c'est ton algo qui est à incriminer !!!

Plus d'informations

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. void main()
  4. {
  5. float x,y,z,a,b,c;
  6. char o;
  7. printf("\nEntrez le premier Nombre: " );
  8. scanf("%f",&x);
  9. printf("\nEntrez le deuxieme Nombre: " );
  10. scanf("%f",&y);
  11. printf("\nEntrez un operateur (+,-,*,/) : " );
  12. scanf("%c",&o);
  13. if(o=='+')
  14. {
  15. z= x + y;
  16. printf("\nLa somme vaut:%f",&z);
  17. }
  18. else
  19. if(o=='-')
  20. {
  21. a= x - y;
  22. printf("\nLa différence vaut:%f",&a);
  23. }
  24. else
  25. if(o=='*')
  26. {
  27. b= x * y;
  28. printf("\nLa multiplication vaut:%f",&b);
  29. }
  30. else
  31. if(o=='/')
  32. {
  33. if(y<=0)
  34.          printf("\nERREUR: Le dénominateur est négatif" );
  35.   else
  36.   {
  37. c= x / y;
  38.   printf("\nLa division vaut:%f",&c);
  39.   }
  40. }
  41. system("PAUSE" );
  42.  
  43. }

Message cité 1 fois
Message édité par kiooik le 17-03-2006 à 12:05:48
zeb
Profil : Modérateur libre
Plus d'informations

Et bien c'est bien ton code qui ne va pas !
 
En fait le scanf ( "%c", &o ); récupère le caractère retour chariot du précédent scanf. Pour t'en convaincre ajoute cette ligne juste après scanf("%c",&o); :

Code :
  1. printf ( "-- %d --\n", o );

Ca affiche le code ASCII du caractère récupéré dans o.
 
Pour éviter ça, vide le buffer d'entrée avant ce scanf. Par principe, tu peux le faire aant chaque scanf :

Code :
  1. fflush(stdin);

.
 
Voilà pour la solution au problème exposé.
 
 
Ton code vaut ce qu'il vaut et mériterait des commentaires voire des critiques, ne serait-ce que pour donner tout de suite de bonnes habitudes au débutant que tu sembles être : je laisse ce soin à d'autres mais prends ces critiques comme des encouragements à bien faire. ;)

C is a sharp tool
Plus d'informations

a écrit :

Pour éviter ça, vide le buffer d'entrée avant ce scanf. Par principe, tu peux le faire aant chaque scanf :

Code :
  1. fflush(stdin);

.


Argh NON ! Comportement indéfini. fflush() n'existe que pour les flux sortants.
 
A lire d'urgence :
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers


---------------
Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/

 

C is a sharp tool
Plus d'informations


 
Les saisies sont instables. Il ne faut pas utiliser scanf() si on ne maîtrise pas cette fonction. Trop complexe.  
 
Alternatives :  
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers
 
pose des questions si tu ne comprends pas.
 
D'autre part, main() retourne int :  
 
http://mapage.noos.fr/emdel/notes.htm#typemain
 
<conio.h> et les fonctions qui vont avec ne sont pas standards...
...


Message édité par Emmanuel D elahaye le 17-03-2006 à 16:33:28

---------------
Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/

 

zeb
Profil : Modérateur libre
Plus d'informations

Entièrement d'accord aveec Emmanuel quand à l'utilisation de scanf. Ce n'est pas une fonction pour débutant. AMHA, seul fgets devrait être utilisé.
 
Pourtant si le premier programme n'utilise que printf pour dire bonjour au monde, le second, invariablement, demande une saisie avec un scanf. Il faudrait refaire tous les manuels de C.
 
Mais le défi aujourd'hui, c'est de virer le retour chariot resté coincé dans le buffer de stdin, pour pouvoir faire un scanf ( "%c", &o ); . En considérant que faire autrement est hors sujet, comment faire en C standard et stable ?

C is a sharp tool
Plus d'informations

a écrit :

Pourtant si le premier programme n'utilise que printf pour dire bonjour au monde, le second, invariablement, demande une saisie avec un scanf. Il faudrait refaire tous les manuels de C.


 
Rien de tel dans le K&R.

Citation :


Mais le défi aujourd'hui, c'est de virer le retour chariot resté coincé dans le buffer de stdin, pour pouvoir faire un scanf ( "%c", &o ); . En considérant que faire autrement est hors sujet, comment faire en C standard et stable ?

J'ai donné les liens ! Tout est expliqué, et il y a même un exemple de réalisation
 
http://mapage.noos.fr/emdel/inputs.htm


Message édité par Emmanuel D elahaye le 17-03-2006 à 17:04:08

---------------
Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/

 

zeb
Profil : Modérateur libre
Plus d'informations

Je viens de revoir mon fflush(stdin); et je bats ma culpe : c'est mal de faire ça.
 
Emmanuel> K&R ! Quand je dis que tu es un orthodoxe intégriste... :ange:
 
Une fois de plus je finis par être entièrement d'accord (*) avec Emmanuel (il m'énerve). kiooik, abandonne les scanf.
 
(*) N'empèche que force est de constater que scanf reste présentée comme LA fonction d'entrée par excellence, dans 99% des manuels sur le C. (Le 1% restant c'est le site d'Emmanuel :D ). J'en veux pour preuve que 1° ce pauvre kiooik n'avait même pas idée de comment faire autrement, 2° les tutos (sauf ceux de K&R&Delahaye) le présentent en seconde position après printf, 3° l'utilisation de cette fonction est tellement problématique que la littérature sur le sujet est plétorique et que 4° même WIKIPEDIA dans sa définition du langage C présente cette fonction comme essentielle.

C is a sharp tool
Plus d'informations

a écrit :

Je viens de revoir mon fflush(stdin); et je bats ma culpe : c'est mal de faire ça.
 
Emmanuel> K&R ! Quand je dis que tu es un orthodoxe intégriste... :ange:
 
Une fois de plus je finis par être entièrement d'accord (*) avec Emmanuel (il m'énerve). kiooik, abandonne les scanf.
 
(*) N'empèche que force est de constater que scanf reste présentée comme LA fonction d'entrée par excellence, dans 99% des manuels sur le C.


Cas classique d'auteurs qui se recopient les uns les autres sans refléchir... C'est un peu comme les profs...  
 
Ceux qui savent, ce sont les gens de terrain. Eux, on ne leur demande jamais leur avis...

Citation :


 (Le 1% restant c'est le site d'Emmanuel :D ). J'en veux pour preuve que 1° ce pauvre kiooik n'avait même pas idée de comment faire autrement, 2° les tutos (sauf ceux de K&R&Delahaye) le présentent en seconde position après printf, 3° l'utilisation de cette fonction est tellement problématique que la littérature sur le sujet est plétorique et que 4° même WIKIPEDIA dans sa définition du langage C présente cette fonction comme essentielle.

Je n'ai rien inventé. J'ai simplement fréquenté pendant plusieurs années 'ceux qui savent' sur le forum Usenet comp.lang.c. La référence en la matière est la FAQ de c.l.c. (ainsi que celle de f.c.l.c., inspirée de celle de c.l.c., et complétée).
 
http://docs.mandragor.org/files/Pr [...] q/top.html
http://docs.mandragor.org/files/Pr [...] lc_faq_fr/
 
Quand à Wikipedia, les gens de clc estiment que c'est n'importe quoi et ils ont fait leur propre wiki sur le sujet :
 
http://www.clc-wiki.net/wiki/Main_Page
 
qui est encore un peu maigre...


---------------
Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/

 


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » C / C++ / Java » Besoin d'aide !!
 

Annonces Google
Publicité
Les ressources relatives