Bonjour a tous,

Je rencontre un comportement vraiment bizarre de l'affichage avant un appel a select().

Voila, dans mon code qui est une application de chat client/serveur avec des sockets en tcp sous unix, je rencotre ce probleme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
    /* pour afficher le menu de l'application */
    afficherMenu();
 
    FD_ZERO(&rdfs);
    FD_SET(STDIN_FILENO, &rdfs);
    FD_SET(maSocket, &rdfs);
 
    if( select( maSocket + 1, &rdfs, NULL, NULL, NULL ) == -1 ) {
        perror("Erreur dans select");
        exit(0);
    }
 
    if(FD_ISSET(STDIN_FILENO, &rdfs) {
        scanf("%d", &choix);
        ........................
    }
Et ma méthode afficherMenu() est la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
void afficherMenu() {
    printf("1 - Envoyer un message a un membre\n");
    printf("2 - Envoyer un message a tous les membres\n");
    printf("3 - Se déconnecter\n");
    printf("Choisissez une commande");
}
Le fonctionnement est simple, select surveille l'entrée standard, pour capturer des saisies de l'utilisateur et surveille aussi la socket pour recevoir les messages des autres membres.

Le problème est que dans l'affichage du menu avant select, les 3 commandes s'affichent mais pas la dernière ligne qui demande de choisir une commande, il y a juste le prompteur qui attend une saisie et ca se bloque.

Donc si jamais quelqu'un a une explication a ca, elle serait la bienvenue et merci d'avance a tous.