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

SL & STL C++ Discussion :

cin >> pour sortir d'un while


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut cin >> pour sortir d'un while
    Bonjour,
    Je souhaite sortir d'une boucle d'ecoute de serveur grace a l'entree de "Y" au clavier.

    J'avais en premier ecris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       char* stopServer = "";
    	while(stopServer != "Y") {
    		cout<<"Waiting for a socket connexion"<<endl;
    		queryStr = getQueryFromSocket();
     
    		answerStr = sendAndRecieve(queryStr);
     
    		sendAnswerToSocket("Server reply: xml string");
     
    		cout<<"Close server: Y/N"<<endl;
    		cin>>stopServer;
    	}
    Et le programme me demandais jamais mon avis, et sortais jamais :

    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
    $./a.out 
    stub: send to motisRequest read from motisReply
    check point fifoExist
    Test if FIFO motisRequest.fifo is already there ...
    Open FIFO motisRequest.fifo for writing and wait for the other side ...
    OK, here we go ...
    Open FIFO motisReply.fifo for reading and wait for the other side ...
    ...initialized
    Server initialized
    Waiting for a socket connexion
    Y
    Socket connected
    Query String: 29 3 2007 10 59 29 3 2007 10 59 D 0 8004338 %% 16 8000002
    send: 29 3 2007 10 59 29 3 2007 10 59 D 0 8004338 %% 16 8000002
    send request...done 
    waiting for reply...strange: nothing to read
    stub got: 
    Answer from server: Server reply: xml string
    Close server: Y/N
    Waiting for a socket connexion
    y
    ^C
    Puis j'ai chercher, et j'ai lu : http://jlecomte.ifrance.com/c++/c++-...output-fr.html et particulierement le paragraphe [15.2]Pourquoi mon programme part-il en boucle infinie quand quelqu'un entre un caractère invalide?

    Du coup, j'ai ecris ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       	while((cin>>stopServer) && (stopServer != "Y")) {
    		cout<<"Waiting for a socket connexion"<<endl;
    		queryStr = getQueryFromSocket();
     
    		answerStr = sendAndRecieve(queryStr);
     
    		sendAnswerToSocket("Server reply: xml string");
     
    		cout<<"Close server: Y/N"<<endl;
     
    	}
    Mais la il sort tout le temps...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $./a.out 
    stub: send to motisRequest read from motisReply
    check point fifoExist
    Test if FIFO motisRequest.fifo is already there ...
    Open FIFO motisRequest.fifo for writing and wait for the other side ...
    OK, here we go ...
    Open FIFO motisReply.fifo for reading and wait for the other side ...
    ...initialized
    Server initialized
    stub: request shutdown

    Je suis a la recherche d"une solution ! Merci d'avance

    PS : le clavier qwerty explique l'absence d'accent dans mon message.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    char*, avant de pouvoir représenter une chaîne type C, c'est avant tout un pointeur. Donc le comparer à une autre chaîne (un autre pointeur) avec l'opérateur != ne renverra jamais vrai.

    Utilise plutôt std::string (surtout que comme tu le manipules, ton programme pourrait tout aussi bien crasher).

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    En fait, c'etait un string, jusqu'a que je tombe sur un bout de code qui fait deviner un entier, ce qui m'a fait penser que string n'etait pas adapter, puis j'ais mis un char, mais le compilateur rallait parce que ca faisait un caste illegal d'un char en char*, alors je lui ai mis son char*

    Je suis revenu en string donc maintenant, mais le comportement est toujours le meme

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le code est exactement le même, au type près ?

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    oui

  6. #6
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Supposition un peu basique, mais dans ton premier exemple, plus la sortie correspondante, tu demandes à sortir sur Y, mais tu as saisi y. As-tu tenté en majuscule? (Avec std::string, c'est pareil, c'est pour ça que je suppose ça )

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    oui j'ai tente le "Y" et le "y"

    Personne n'a eu a faire ca un jour, sortir d'une boucle infinie suite a une action au clavier ? :/ C'est etrange !


    Snif, il dois bien exister une solution ! enfin j'espere lol

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu as vérifié que ton flux d'entrée était bien vide ? (il peut rester des \n après des saisies)

    Pour vider le flux d'entrée il y a un bout de code dans la FAQ.

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    non je ne l'ai pas fais, je suppose qu'il s'agit de
    http://c.developpez.com/faq/cpp/?pag...e#SL_cin_pause
    ou
    http://c.developpez.com/faq/cpp/?pag...e#SL_cin_clear

    Je regarde bientot, il se trouve que je suis maintenant face a un probleme plus grave... mais on fera un autre topic si besoin !

  10. #10
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Tu peux utiliser do while non ?

    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
    #include <iostream>
    #include <string.h>
     
    using namespace std;
     
    int main()
    {
        string caractere;
     
        do
        {
         cout << "Entrer Y : ";
         cin >> caractere;
        }while(caractere != "Y");
     
        return 0;
    }
    Je ne sais pas si je répond à ta question
    KreatoO

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    Ben en fait c'est un serveur qui tourne, et c'est juste pour l'arrêter. Donc faut pas que le programme fasse une pause sur le prompt, il doit écouter le réseau tout le temps. Et en écrivant c'est quelques lignes, je m'aperçois que ça doit être bien plus compliqué à faire que ce que j'ai écris !

    Et le plus drôle c'est que j'ai aucune méthode simple en tête. On doit rendre avant ce soir minuit, je pense que je vais oublier de faire quelque chose pour sortir du programme :o

    Ceci dit le topic n'est pas fermé, c'est toujours intéressant d'avoir une solution :o

  12. #12
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    J'ai exactement le même problème alors, je suis en train d'essayer de faire un chronomètre avec possibilitée de le Stoper en appuillant sur S, simplement je ne peux pas faire comme sa sinon sa attend une touche et donc le chronomètre ne tourne pas.

    J'ai donc exactrement le même sousi ^^
    KreatoO

  13. #13
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    je me sens moins seul !

  14. #14
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par CactO_o's
    J'ai exactement le même problème alors, je suis en train d'essayer de faire un chronomètre avec possibilitée de le Stoper en appuillant sur S, simplement je ne peux pas faire comme sa sinon sa attend une touche et donc le chronomètre ne tourne pas.

    J'ai donc exactrement le même sousi ^^
    il faut alors faire un programme multithread

  15. #15
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    Je connaisais cette méthode, mais il y a pas plus simple ? vu la simplicité du serveur, c'est pas un peu surdimentionné comme solution ? Je dis ça, c'est pas une critique, je me pose vraiment la question !

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    ben vous voulez à la fois "ecouter" en permanence le réseau et "écouter" la console.
    Faut bien que chaque écoute soit faite par une tâche indépendante de l'autre : un thread.

  17. #17
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    Des fois, après avoir lu les expications, on se sent bête

    Je pense qu'on peut déclaré le sujet résolu,

    Merci !

  18. #18
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    c'est une méthode classique, mais il y plus simple quand même!
    ll faut simplement que tu "écoutes" les événements clavier, mais pas de std::cin.
    Tu vérifies juste que la touche "Y" a été enfoncée, en tant qu'événement...

  19. #19
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par olive_le_malin
    ben vous voulez à la fois "ecouter" en permanence le réseau et "écouter" la console.
    Faut bien que chaque écoute soit faite par une tâche indépendante de l'autre : un thread.
    C'est bien entendu la meilleure solution....
    L'autre que je te propose est valable dans le cas de petites boucles. Dans ce cas, traiter un cas après l'autre se ramène presque à traiter les deux écoutes en même temps!

  20. #20
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 75
    Points : 45
    Points
    45
    Par défaut
    hum ok c'était pas façon de voir les choses, mais j'ai pas trouvé un bout de code qui ferait ça sur le net, vous auriez une proposition ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Probleme pour sortir d'une boucle while
    Par aikinhdo dans le forum Langage
    Réponses: 0
    Dernier message: 27/07/2007, 15h01
  2. Pour sortir d'un programme Perl legalement
    Par Pauli dans le forum Langage
    Réponses: 1
    Dernier message: 03/05/2007, 16h38
  3. Réponses: 2
    Dernier message: 20/03/2007, 18h22
  4. tabulation pour sortir d'un sous formulaire
    Par rapace dans le forum Access
    Réponses: 4
    Dernier message: 30/11/2005, 16h20
  5. Sortir d'un while par l'appui d'une touche ?
    Par voxel dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 18/08/2004, 09h44

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