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)
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"
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 !!!
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 :
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 :
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.
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 ?
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
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...
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 ). 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 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...
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 ). 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).