(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/>