(perl新手) 我有一个小的perl程序来计算阶乘。我想使用while循环,以便在用户得到结果后,他们会被问到“计算另一个因子?Y / N”并让Y再次运行代码&让N结束该计划。
这是我的代码:
print"Welcome! Would you like to calculate a factorial? Y/N\n";
$decision = <STDIN>;
while $decision == "Y";
{
print"Enter a positive # more than 0: \n";
$num = <STDIN>;
$fact = 1;
while($num>1)
{
$fact = $fact * $num;
$num $num - 1;
}
print $fact\n;
print"Calculate another factorial? Y/N\n";
$decision = <STDIN>;
}
system("pause");
给我带来麻烦的是在哪里放置while循环以及如何使Y / N选项工作。我也不清楚system("pause")
和sleep
函数。我知道system("pause")
使我的程序工作。
答案 0 :(得分:4)
你的程序几乎正确,只有几个问题:
use strict;
和use warnings;
添加到您的脚本中。他们会
(除了其他东西)强制你声明你使用的所有变量(使用my $num=…;
)
并警告你常见的错误(如拼写错误)。有些人认为这是一个错误
默认情况下,use strict;
和use warnings;
未启用。chomp
功能。<
,>
,<=
,>=
,==
和!=
进行比较。对于你必须使用的字符串
lt
(小于),gt
,le
(小于或等于),ge
,eq
和ne
。如果您使用其中一个号码
字符串Perl上的运算符会尝试将您的字符串解释为数字,因此$decision == "Y"
会检查$decision
是否为0
。如果你有use warnings;
Perl会注意到你。
请改用$decision eq "Y"
。while
循环有一个尾随;
,这将给你一个无穷无尽的
循环或无操作(取决于$decision
的内容)。 =
中的$num = $num - 1;
。"
print "$fact\n";
system("pause")
仅适用于pause
为外部命令的Windows。在Linux上(其中
我刚刚测试过没有这样的命令,system("pause")
失败了command not found
。
我将其替换为sleep(5);
,只需等待5秒钟。
#!/usr/bin/env perl
use strict;
use warnings;
print "Welcome! Would you like to calculate a factorial? Y/N\n";
my $decision = <STDIN>;
chomp($decision); # remove trailing "\n" from $decision
while ( $decision eq 'Y' ) {
print "Enter a positive # more than 0: \n";
my $num = <STDIN>;
chomp($num);
my $fact = 1;
while ( $num > 1 ) {
$fact = $fact * $num;
$num = $num - 1;
}
print "$fact\n";
print "Calculate another factorial? Y/N\n";
$decision = <STDIN>;
chomp($decision);
}
print "ok.\n";
sleep(5); # wait 5 seconds
答案 1 :(得分:0)
始终将use warnings
和use strict
添加到程序的开头。
您的代码中存在许多拼写错误。
#!/usr/bin/perl
use warnings;
use strict;
print "Welcome! Would you like to calculate a factorial? Enter 'Y' or 'N': ";
my $answer = <STDIN>;
chomp($answer);
while($answer =~ /^[Yy]$/){
my $fact = 1;
print"Enter a positive number greater than 0: ";
my $num = <STDIN>;
chomp($num);
my $number_for_printing = $num;
while($num > 0){
$fact = $fact * $num;
$num--;
}
print "The factorial of $number_for_printing is: $fact\n";
print"Calculate another factorial? Enter 'Y' or 'N': ";
$answer = <STDIN>;
chomp($answer);
}
print "Goodbye!\n";