Boucle While en Pearl
Pourquoi....
-
jisisv Messages postés 3645 Date d'inscription Statut Modérateur Dernière intervention -
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 :
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";
A voir également:
- Boucle While en Pearl
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Problème xiaomi redmi note 8t s'allume et s'éteint vibre - Forum Xiaomi
- Pc qui s'allume et s'éteint en boucle - Forum Virus
5 réponses
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 :
et non :
- Toutes les données entrées finissent par un symbole indiquant le "Entrée". Pour éviter ça, on utilise chomp :
- Du coup, dans la condition de la boucle While, préfère : < plutôt que lt (sauf erreur de ma part) :
- La ligne :
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 :
Comme ici, il s'agit d'une incrémentation de 1, il y a :
J'espère ne pas avoir dit de bêtises.
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.
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.
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";
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question