perl - 尝试使用while循环询问用户是否要再次执行此操作

时间:2016-10-22 15:10:44

标签: perl loops factorial

(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")使我的程序工作。

2 个答案:

答案 0 :(得分:4)

你的程序几乎正确,只有几个问题:

  1. 请习惯将use strict;use warnings;添加到您的脚本中。他们会 (除了其他东西)强制你声明你使用的所有变量(使用my $num=…;) 并警告你常见的错误(如拼写错误)。有些人认为这是一个错误 默认情况下,use strict;use warnings;未启用。
  2. 当从STDIN(或其他文件句柄)读取一行时,读取行将包含 尾随换行符&#34; \ n&#34;。为了比较工作,你必须摆脱使用 chomp功能。
  3. Perl中有两组不同的比较运算符:一组用于字符串,一组用于数字。 将数字与<><=>===!=进行比较。对于你必须使用的字符串 lt(小于),gtle(小于或等于),geeqne。如果您使用其中一个号码 字符串Perl上的运算符会尝试将您的字符串解释为数字,因此$decision == "Y" 会检查$decision是否为0。如果你有use warnings; Perl会注意到你。 请改用$decision eq "Y"
  4. 在比较之后,外while循环有一个尾随;,这将给你一个无穷无尽的 循环或无操作(取决于$decision的内容)。
  5. 您忘记了=中的$num = $num - 1;
  6. 您忘记了"
  7. 周围的引号print "$fact\n";
  8. system("pause")仅适用于pause为外部命令的Windows。在Linux上(其中 我刚刚测试过没有这样的命令,system("pause")失败了command not found。 我将其替换为sleep(5);,只需等待5秒钟。
  9. #!/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 warningsuse 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";