IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Attente de saisie d'un caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut Attente de saisie d'un caractère
    Bonjour à tous,

    Je poste de petit message car j'ai un problème avec une saisie de caractère.

    Voici le programme que je dois faire.

    Enoncé principal:
    Ecrire des programmes en langage C qui vont gérer la gestion d’entrée sorties d’articles dans une grande Surface. Ces programmes vont communiquer entre eux grâce à des connexions UDP via les librairies fournies. Trois programmes principaux doivent être écrits.

    Partie 2:
    Au niveau de ScannerEntree, on saisit maintenant le numéro de code et une quantité.
    Le serveur reçoit la requête de ScannerEntrée. Il modifie la quantité en ajoutant la nouvelle quantité au fichier stock.
    Il retourne l’intitulé au scanneur ainsi que la nouvelle quantité. Si l’article n’exite pas , un code d’erreur doit être retourné au client.

    Le scanner affiche l’intitulé de l’article, le nouveau stock et attend la saisie d’une touche

    Il y a plusieurs scanners en entrée et le serveur traite une requête à la fois. Quand le serveur a fini de traiter la requête il doit toujours revenir sur attendre évènement.
    Idem pour le client.


    Pour la partie qui établit les connexions, tout marche convenablement.

    Seul problème qui se pose à moi, lorsque dans le programme client je demande si le client
    souhaite encore faire une saisie, j'utilise le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    do{
                    // tout le code établissant connexion, ...
    		printf("\n\tSouhaitez vous encore rechercher un article? (Y/N)");
    		fflush(stdin);
                    scanf("%c",cont);
     
     
    	}while( cont == "y");
    Cela ne marche pas. Il passe toujours la saisie. Je travaille dans deux terminaux placer dans la même fenêtre (je ne pense pas que cela peut influencer). J'ai beau essayer avec des getch, getchar, fgets, etc., je ne sais plus comment faire.

    Ma plateforme de développement est un OpenSuse 10.2. Je suis sur une machine virtuelle (je ne pense que ça change quelque chose).

    Si quelqu'un parmi vous avait une ou plusieurs solutions, ce serais chouette

    Je vous remercie d'avance pour la ou les solutions. Je ne sais vraiment plus quoi faire.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    1. fflush(stdin) n'est pas standard.
    2. tu compares un caractère avec l'adresse d'une chaîne.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut


    oui mais même en remplaçant le code par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
           do{
     
                    printf("\n\tSouhaitez vous encore rechercher un article? (Y/N)");
    		fflush(stdin);
    		scanf("%c",&cont);
     
     
    	}while( cont == 'y');
    Il me passe quand même la saisie du caractère... et ça que ce soit avec ou sans le fflush();

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Que veux-tu dire par "il passe toujours par la saisie" exactement ?
    Cette boucle indique "Poser la question au moins une fois et continuer à la re-poser tant qu'on répond 'y'"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Le mieux serait encore de ne pas utiliser scanf.

    Ceci est déjà plus solide :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Lecture d'un caractère, lecture des éventuels caractères
        tapés en trop et retour du premier caractère lu */
    char lireCar(void)
    {
        char c = getchar();
        while (getchar() != '\n');
        return c;
    }
     
    int main(void)
    {
        char c = 0;
     
        do
        {
           printf("\n\tSouhaitez vous encore rechercher un article? (Y/N)");
           fflush(stdout);
           c = lireCar();
        }while( c == 'y');
     
        return 0;
    }

Discussions similaires

  1. saisie d'un caractère après une valeur dans inputbox
    Par CélineM dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/06/2007, 14h56
  2. empecher la saisie d'un caractère dans un édit
    Par Invité dans le forum Access
    Réponses: 7
    Dernier message: 17/01/2007, 15h35
  3. Attente de saisie de l'utilisateur au milieu d'une méthode
    Par tm@imag.fr dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 11/05/2006, 11h43
  4. Programmer une boucle de saisie chaine de caractère.
    Par Spike Spiegel dans le forum C
    Réponses: 30
    Dernier message: 02/10/2005, 17h46
  5. Saisie de plusieurs caractère dans une liste déroulante
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/03/2005, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo