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
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
5 réponses
Utilisateur anonyme
28 juil. 2015 à 10:25
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 :
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.
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
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";
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
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...
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
29 juil. 2015 à 03:24
Voir lignes 10-11: il faut tester la validité de l'entrée !