接受用户输入perl
如何接受整数列表作为输入?我唯一能想到的就是使用STDIN从列表中获取每个整数。有更好的方法吗?这里有一种方法,使用逗号分隔的整数列表:接受用户输入perl,perl,subroutine,Perl,Subroutine,如何接受整数列表作为输入?我唯一能想到的就是使用STDIN从列表中获取每个整数。有更好的方法吗?这里有一种方法,使用逗号分隔的整数列表: my $input = <STDIN>; chomp($input); if ($input !~ m/^(\d+(,\d+)*)?$/) { die('invalid input'); } my @input = split(/,/, $input ); my$input=; chomp($输入); 如果($input!~m/^(\d+(,\d
my $input = <STDIN>;
chomp($input);
if ($input !~ m/^(\d+(,\d+)*)?$/) { die('invalid input'); }
my @input = split(/,/, $input );
my$input=;
chomp($输入);
如果($input!~m/^(\d+(,\d+*)?$/){die('invalid input');}
my@input=split(/,/,$input);
或者,您可以每行读取一个整数:
my @input;
while (my $input = <STDIN>) {
chomp($input);
if ($input !~ m/^\d+$/) { die('invalid input'); }
push(@input, $input );
} ## end while
my@input;
while(my$input=){
chomp($输入);
如果($input!~m/^\d+$/){die('invalid input');}
推送(@input,$input);
}##结束时
我就是这样做的:
$input = 0;
while($input != -1)
{
print "add input, finish with -1", "\n";
$input = <STDIN>;
chomp($input);
push(@array, $input);
}
#You also need to remove the last input, -1, with pop:
pop(@array);
print @array;
如果用户直接输入以制表符分隔的数字字符串,
可以使用“拼接”功能分离字符串
@array = splice(/\t/,$array[0])
您想输入一个整数列表吗?我想你的意思是你想输入一个数字列表,如果它们都是整数,就接受这个输入 在这个程序中,我一直循环,直到得到一个有效的列表,因此(;;)。有些人喜欢
,而(1)
我使用'slooks\u like\u number
测试输入是否为数字,然后使用int
验证该数字是否为整数。您可以使用像/^\d+$/
这样的正则表达式,但不能保证它在所有情况下都能工作。使用int
和看起来像数字
可以保证结果
我假设整数列表可以是空格分隔的或逗号分隔的,或者两者都是,因此我的split/[\s,]+/
你说:
我唯一能想到的就是使用STDIN从列表中获取每个整数。有更好的方法吗
从文件句柄读入数据,无论是文件还是类似于STDIN
。没办法。然而,你至少可以让它成为一个单一的输入,而不是一次一个,我想你的意思是
顺便说一句,我可以将我的数字测试与:
if( not looks_like_number $integer or $integer != $integer ) {
由于这是一个或语句,如果首先检查$input
是否为数字,如果不是,则会在检查输入是否为整数之前发出警告。然而,我不确定这是否比单独声明更清楚
#! /usr/bin/env perl
#
use strict;
use warnings;
use feature qw(say);
use Scalar::Util qw(looks_like_number);
my @integers; # Storage for my integers
#
# Keep looping until you have a valid input
#
INPUT:
for (;;) {
print "List of integers: ";
my $input = <STDIN>;
chomp $input;
@integers = split /[\s,]+/, $input;
#
# Verify inputted "number" is numeric and an integer
#
for my $integer ( @integers ) {
if( not looks_like_number $integer ) {
warn qq(Invalid number entered: "$integer");
next INPUT;
}
if( $integer != int $integer ) {
warn qq(Invalid integer entered: "$integer");
next INPUT;
}
}
#
# Exit if there's at least one integer in @integers
#
last if @integers;
}
say "Integers: " . join ": ", @integers;
#/usr/bin/env perl
#
严格使用;
使用警告;
使用特征qw(例如);
使用Scalar::Util qw(看起来像数字);
我的@integers;#存储我的整数
#
#保持循环,直到您有一个有效的输入
#
输入:
对于(;;){
打印“整数列表:”;
我的$input=;
chomp$输入;
@整数=拆分/[\s,]+/,$input;
#
#验证输入的“数字”是否为数字和整数
#
对于我的$integer(@integers){
if(看起来不象\u number$integer){
警告qq(输入的无效数字:$integer”);
下一个输入;
}
如果($integer!=int$integer){
警告qq(输入的整数无效:$integer”);
下一个输入;
}
}
#
#如果@integers中至少有一个整数,则退出
#
最后一个if@整数;
}
说“整数:”。连接“:”,@整数;
您必须解释从文件句柄读取数据的问题所在,因为没有其他方法可以将数据获取到程序中,而且很难猜测更好的方法是什么。接受输入的方法有很多种。您想使用哪一个?当您显示代码或输出时,将行缩进四个空格,这样它就会显示为一个程序。您可以通过单击上面的edit
查看我是如何做到这一点的。您从未验证过您的输入,如果您输入非整数,这可能会成为一个问题。你也从来没有咀嚼过你的输入,这就是为什么每个输入都在一行的原因。每个数字的末尾都有一个隐藏的新行。谢谢你,大卫。此外,还必须将-1与pop一起移除。我会编辑的!如果您想要一行If
,请反向使用:die qq(无效输入)If$input!~/^\d+$/
。
#! /usr/bin/env perl
#
use strict;
use warnings;
use feature qw(say);
use Scalar::Util qw(looks_like_number);
my @integers; # Storage for my integers
#
# Keep looping until you have a valid input
#
INPUT:
for (;;) {
print "List of integers: ";
my $input = <STDIN>;
chomp $input;
@integers = split /[\s,]+/, $input;
#
# Verify inputted "number" is numeric and an integer
#
for my $integer ( @integers ) {
if( not looks_like_number $integer ) {
warn qq(Invalid number entered: "$integer");
next INPUT;
}
if( $integer != int $integer ) {
warn qq(Invalid integer entered: "$integer");
next INPUT;
}
}
#
# Exit if there's at least one integer in @integers
#
last if @integers;
}
say "Integers: " . join ": ", @integers;