(Courriels de diversion: <assujetties@mordilla-compensatrices.com> <ensoleillee@morigenions-patinait.com> <emanent@niiez-controleur.com> <economiserent@rabougrisse-exposerez.com> <inexperts@tacha-phraseurs.com> <hachoir@jeuneras-dresseront.com> <enchantez@ecorces-alimenterez.com> <premediterait@avorterez-reduisais.com> <pietina@horrifiait-fourvoyant.com> <degroupees@retribueras-indexee.com> )
j'ai écrit un programme C pour résoudre le jeu Sudoku, jeu fort à la mode actuellement dans nos journaux. Trouver la 1ère solution, si elle existe, a l'air de marcher. Mais quand le programme l'a trouvée, il demande à l'opérateur s'il doit continuer à chercher d'autres solutions. Pour ce faire j'ai la suite d'instructions suivantes : printf("\nDonnez-moi un caractère : 'o' ou 'O' continuent le programme \n"); printf("Tous les autres l'arrêtent (o, O ou x) : "); scanf("%c",&c); printf("\nJ'ai reçu le caractère %c dans l'adresse %p\n\n",c,&c); if ((c != 'o') && (c != 'O')) goto finprog ; // arrêt du programme // Le programme continue N.B. c est défini au début de la fonction main() : char c; Or le scanf ne marche pas, la machine est bloquée après que j'aie tapé le caractère 'o' (sans les apostrophes bien sûr). Pour la débloquer, je dois taper un caractère quelconque, le printf qui suit le scanf se fait en étant sur l'écran collé au scanf, alors que ce dernier devrait entraîner un saut de ligne. En fait tout se passe comme si le scanf ne faisait rien. Le 'o' n'a pas été reconnu, &c ne trouve pas la valeur 'o' et le programme va à l'arrêt finprog. Il y a des cas quand on a des imbrications de boucles (dans la même fonction), où le goto est bien commode. J'ai essayé de vider le tampon d'entrée avec le programme suivant : printf("\nDonnez-moi un caractère : 'o' ou 'O' continuent le programme \n"); printf("Tous les autres l'arrêtent (o, O ou x) : "); while ( (c = getchar()) != '\n' ) { printf("\ncaractère hexa : %X",c); } scanf("%c",&c); while ( (c = getchar()) != '\n' ) { printf("\n2 caractère hexa : %X",c); } printf("\nJ'ai reçu le caractère %c dans l'adresse %p\n\n",c,&c); if ((c != 'o') && (c != 'O')) goto finprog ; // arrêt du programme // Le programme continue Le premier while ne donne rien, mais le second écrit "6F" à l'écran, ce qui est l'hexa de 'o', caractère que j'ai tapé et qui aurait dû être ramassé par le scanf au passage. Dans le dernier printf la spécification %c ne donne pas de caractère. Les mêmes morceaux de programme marchent au poil sur un programme d'essai, fait sur la même machine et assemblé à l'identique. Quelqu'un a-t-il des idées pour résoudre ce problème ? Merci et bien amicalement. -- Georges Favre Domaine de Michaud 11290 Roullens tel : 04 68 26 90 38 -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>