Boucle While en Pearl

Pourquoi.... -  
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'ai créé un programme tout simple (en Perl) consistant à compter les lamas pour m'endormir. Je dois lancer un compteur s'arrêtant au moment ou j'appuie sur entrée. Quand je l'exécute dans mon invite de commande il ne me prend pas en compte la boucle WHILE. Pouvez-vous m'aider?
Voici le code :

#!/usr/bin/perl -w 

print "Je vais compter les lamas pour m'endormir.\n";
<>;

my $limite;
$limite = <>;
print "Jusqu'à combien dois-je compter ?\n";


#Situation initiale, le compteur est à 1
my $compteur = 1;
print "$compteur lama\n";

# Tant que le compteur n'a pas atteint sa limite
while ($compteur lt $limite)
{
        # On compte
        $compteur eq $compteur + 1;
        print "$compteur lamas\n";
}

print "zzzzzZZZZ";


5 réponses

Utilisateur anonyme
 
Salut,

Je ne connais rien en code Perl mais j'ai fait quelques recherches sur les bases et voici ce que j'ai trouvé d'incohérent :

- Pour faire une demande de donnée à un utilisateur il faut faire :
print "How old are you?";
$age = <>;


et non :

$age = <>;
print "How old are you?";


- Toutes les données entrées finissent par un symbole indiquant le "Entrée". Pour éviter ça, on utilise chomp :
print "Jusqu'à combien dois-je compter ?"
chomp($limite = <>)


- Du coup, dans la condition de la boucle While, préfère : < plutôt que lt (sauf erreur de ma part) :
while ($compteur < $limite)
{
...
}


- La ligne :
$compteur eq $compteur + 1;


semble vouloir incrémenter la variable $compteur de 1. eq est un opérateur de comparateur de chaîne (ici on a des nombres et on souhaite pas comparer) qui compare deux chaines (ici $compteur et $compteur+1) et renvoie 1 si elles sont égales ou 0 si non.
Pour l'affectation, il faut utiliser :
$compteur = $compteur + 1

Comme ici, il s'agit d'une incrémentation de 1, il y a :
$compteur++


J'espère ne pas avoir dit de bêtises.
0
Pourquoi....
 
Je te remercie de ta réponse très explicite mais quand je lance le programme une erreur survient à la ligne de la WHILE. Le signe "<" produit une erreur.
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Ceci fontionnera mieux:
#!/usr/bin/perl -w 

my $limite;
my $compteur = 1;

print "Je vais compter les lamas pour m'endormir.\n";
print "Jusqu'à combien dois-je compter ?\n";
$limite = <STDIN>;

#il faudrait vérifier que $limite est >=1 !
#Situation initiale, le compteur est à 1


# Tant que le compteur n'a pas atteint sa limite
while ($compteur <= $limite)
{
    # On compte
    print "$compteur lamas\n";
    $compteur++ ;
}

print "zzzzzZZZZ\n";



0
Pourquoi....
 
Cela me semblais mieux mais STDIN ne marcherai pas dans ce cas là. Mais maintenant mon invite de commande m'affiche : Argument "\n" isn't numeric in numeric "le" (<=) at perl3 line15, <STDIN> line 1.
0
Utilisateur anonyme
 
Remplace :
$limite = <STDIN>;


par :
chomp($limite = <>)


Désolé de te contre-dire jisisv, mais je pense que le problème semble venir de "\n" qui représente le saut de ligne (appuie sur la touche "Entrée" qui écrit le caractère à la ligne : "\n").
0
Pourquoi.... > Utilisateur anonyme
 
Non j'ai essayé de faire des modifications au niveau de "\n" mais se n'est pas le problème apparemment...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pourquoi....
 
Non cette fois le signe "<=" produit une erreur. Mais après quelques recherches, j'ai vue que les contextes numériques provoquent souvent des Bugs. Mais pour une quelconque raison...
0
Pourquoi....
 
Non en fait j'ai réussi à faire afficher X lamas. Le décompte se fait. Mais reste encore à résoudre la $limite. le décompte ne s'arrête pas quand on appuie sur entrée.
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Voir lignes 10-11: il faut tester la validité de l'entrée !
0