用户首先输入多行。然后它从用户输入读取n行文本,并向后打印这些行,即,如果n = 5,则打印第5行 第一行,第四行,......和第一行最后一行。我在代码中没有想到错误,但是当我开始输入行(换行符为换行符)时,它就不会停止。我的数组可以存储无限数量的行,导致问题停止
use strict;
use warnings;
print "Enter number of n \n";
my $n = <STDIN>;
print "Enter couple lines of text \n";
my @array = (1..$n);
@array=<STDIN>;
do{
print "$array[$n]";
$n--;
}until($n=0);
答案 0 :(得分:0)
结束循环条件为do { … } until ($n = 0);
,相当于do { … } while (!($n = 0));
问题在于条件是赋值,零始终为假,因此循环是无限的。
使用do { … } until ($n == 0);
。
请注意,输入位于行@array = <STDIN>;
中 - 它读取在EOF之前提供的所有输入。它不受任何方式$n
的限制。
#!/usr/bin/env perl
use strict;
use warnings;
print "Enter number of n \n";
my $n = <STDIN>;
printf "Got %d\n", $n;
print "Enter couple lines of text \n";
my @array = (1..$n);
@array = <STDIN>;
do {
print "$n = $array[$n]";
$n--;
} until ($n == 0);
运行时,会给出:
$ perl inf.pl
Enter number of n
3
Got 3
Enter couple lines of text
abc
def
ghi
jkl
^D
3 = jkl
2 = ghi
1 = def
$
我认为你的期望是偏执的。
答案 1 :(得分:0)
以下是一些可能对您有所帮助的提示:
use strict;
和use warnings
,以强制执行良好的编码实践,并帮助您更快地找到语法错误。chomp
来自<STDIN>
的输入才能删除返回字符。 push
将元素添加到数组的末尾。其他相关的数组函数包括pop
,shift
,unshift
和可能splice
。reverse
返回颠倒顺序的数组。for my $element (@array) {
可以是一个有用的构造,用于迭代数组的元素。这些提示会产生以下代码:
use strict;
use warnings;
print "Enter number of n \n";
chomp(my $n = <STDIN>);
die "n must be an integer" if $n =~ /^\d+$/;
my @array;
print "Enter $n lines of text\n";
for (1..$n) {
my $input = <STDIN>;
# chomp $input; # Do you want line endings, or not?
push @array, $input;
}
print "Here is your array: @array";