Boucle While en Pearl

Fermé
Pourquoi.... - Modifié par Lapourax le 28/07/2015 à 10:11
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 29 juil. 2015 à 03:24
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
28 juil. 2015 à 10:25
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....
28 juil. 2015 à 10:38
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 dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
28 juil. 2015 à 10:46
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....
28 juil. 2015 à 11:00
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
28 juil. 2015 à 11:28
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
28 juil. 2015 à 12:14
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
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....
28 juil. 2015 à 12:11
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 dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
29 juil. 2015 à 03:24
Voir lignes 10-11: il faut tester la validité de l'entrée !
0