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

Langage Perl Discussion :

Débutant - Entrée/Sortie


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Débutant - Entrée/Sortie
    Bonjour

    je viens de me lancer dans le Perl. Le "Hello World" fonctionne, ouf!
    Mais j'ai un problème avec le programe (simple) suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print "What's your name? ";
    $name = <STDIN>;
    chomp($name);
    A l'exécution, rien ne se produit sauf si je tape qqc au clavier, auquel cas il m'affiche le message "What's your name?"...
    Pourtant, je voudrais qu'il affiche ce message avant la saisie au clavier. Qu'est ce qui ne va pas dans le code?

    Config : Eclipse 3.1, plug-in EPIC, ActivePerl 5.8.7

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 584
    Points : 2 031
    Points
    2 031
    Par défaut Re: Débutant - Entrée/Sortie
    Citation Envoyé par seigneur.viggen
    Bonjour

    je viens de me lancer dans le Perl. Le "Hello World" fonctionne, ouf!
    Mais j'ai un problème avec le programe (simple) suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print "What's your name? ";
    $name = <STDIN>;
    chomp($name);
    A l'exécution, rien ne se produit sauf si je tape qqc au clavier, auquel cas il m'affiche le message "What's your name?"...
    Pourtant, je voudrais qu'il affiche ce message avant la saisie au clavier. Qu'est ce qui ne va pas dans le code?

    Config : Eclipse 3.1, plug-in EPIC, ActivePerl 5.8.7
    Bonjour,

    a priori :
    - un script avec juste print "hello, world"; fonctionne et t'affiche bien hello, world
    - un autre script commençant par un print n'affiche rien

    Bizarre, ta config

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 584
    Points : 2 031
    Points
    2 031
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #/usr/bin/perl
    use strict;
    my $val = "";
    while(! $val) {
        print "Quel est ton age ?";
        chomp($val = <STDIN>);
    }
    print "tu as $val ans\n";
    Ce code fonctionne sur ma config (win2000 + un vieux Perl) et m'affiche bien la question avant de faire quoi que ce soit d'autre.

    Est-ce qu'il fait également la même chose chez toi ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    En fait, c'sst comme si les instructions de lecture et d'écriture étaient inversées.
    J'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print("What is your name? ");
    $name = <STDIN>;
    Mais à l'exécution, j'obtiens l'inverse : d'abord la lecture du clavier, puis l'affichage du message

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Non, cela me fait le problème : il attend une entrée au clavier avant d'afficher les messages

    Mon affichage :
    5
    Quel est ton age ?tu as 5 ans


    [/code]

  6. #6
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 866
    Points : 4 864
    Points
    4 864
    Par défaut
    Bizarre ton problème !
    Comment exécutes-tu ton code ? Via Eclipse ? Ou tu le lances par une fenêtre DOS ?

    @++

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Tout ceci ressemble fort à un problème de buffersation des entrées sorties ... du à quoi, ça, c'est un autre problème ...

    Tu peux tenter, en début de script, de positionner la variable spéciale $| : Je ne me souviens plus si c'est suffisant où s'il faut aussi passer par un select sur STDOUT ...

    Une autre solution passe par, en début de script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use IO::Handle;
    STDOUT->autoflush(1);
    Bon courage pour la suite ...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je l'exécute directement dans Eclipse, en tant que projet Perl... J'utilise Windows si ca peut vous aider à trouver...

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci 2EuroCents! J'ai rajouté les deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use IO::Handle; 
    STDOUT->autoflush(1);
    et cela fonctionne!

    Merci beaucoup!

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Et avec un \n comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "What's your name? \n";
    Ca ne marche pas mieux ?

    Jérôme

  11. #11
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par jejeman
    Et avec un \n comme cei :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "What's your name? \n";
    Ca ne marche pas mieux ?
    C'est une possibilité, mais comment fait-on, alors, si l'on veut que la réponse de l'utilisateur soit sur la même ligne que la question ???

  12. #12
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par seigneur.viggen
    et cela fonctionne!
    Alors n'oublie pas le tag [Résolu]

    Tu peux l'appliquer à ton sujet en utilisant le bouton, en bas à gauche de l'interface quand tu visualises le fil ... Cela permet, ensuite, des requêtes spécifiques à la modération ...

    Merci d'avance.

    P.S. Ce message de rappel, ainsi que toute réponse directe qui pourrait lui être apportée, sera supprimé aussitôt le tag [Résolu] apposé au sujet.

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/04/2010, 11h24
  2. Réponses: 2
    Dernier message: 08/02/2010, 12h12
  3. IO entrée sortie cas d'école [débutant]
    Par crazykangourou dans le forum Langage
    Réponses: 3
    Dernier message: 13/03/2007, 14h24
  4. [Débutant]Procédure avec paramètres entrée / sortie
    Par jeromejanson dans le forum Langage
    Réponses: 13
    Dernier message: 10/10/2005, 08h30
  5. [Débutant]#entre int main & void main
    Par Binga dans le forum C
    Réponses: 9
    Dernier message: 10/08/2004, 15h54

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