从标准输入读取参数时出现意外行为
Posted
技术标签:
【中文标题】从标准输入读取参数时出现意外行为【英文标题】:Unexpected behaviour when reading parameters from standard input 【发布时间】:2020-05-16 23:37:06 【问题描述】:sub Solution
$matchflag=0;
$occurence=0;
#OUPTUT [uncomment & modify if required]
my $ind=index($m,$p);
if ($ind!=-1)
$matchflag=1;
$occurence= () = $m =~ /$q/g;
print("$matchflag\n");
print($occurence);
#INPUT [uncomment & modify if required]
$n=<STDIN>;
$m=<STDIN>;
$p=<STDIN>;
$q=<STDIN>;
Solution();
你好,有人能告诉我这段代码有什么问题吗? 它给了我以下输出。
6
naman
nam
n
0
1
显然 0 应该是 1,因为 nam 存在于 naman 字符串中。并且 1 应该是 2,因为 n 在字符串中出现了两次。
这段代码有什么问题?
【问题讨论】:
您需要告诉我们您的输入是什么。请edit您的问题并包括您如何调用此代码。 您应该始终使用use strict; use warnings;
。您有许多范围界定问题。
【参考方案1】:
当您从<STDIN>
读取时,您需要删除字符串末尾的\n
换行符,
chomp for
$n=<STDIN>,
$m=<STDIN>,
$p=<STDIN>,
$q=<STDIN>,
;
您可能还想通过使用my
词法而不是全局变量来考虑更好的范围界定,以及一些使生活更轻松的检查,例如use strict; use warnings;
【讨论】:
chomp($n=<STDIN>)
或 $n=<STDIN>; chomp($n)
效果同样好。
另外,有没有办法在接受如此简单的输入时避免多次写入 OP可能意味着代码如下
use strict;
use warnings;
my $n = input();
my $m = input();
my $p = input();
my $q = input();
Solution();
sub input
my $input = <STDIN>;
chomp $input;
return $input;
sub Solution
my $matchflag=0;
my $occurence=0;
#OUPTUT [uncomment & modify if required]
my $ind=index($m,$p);
if ($ind!=-1)
$matchflag=1;
$occurence= () = $m =~ /$q/g;
print("Match flag: $matchflag\n");
print("Ocurance: $occurence\n");
输出
6
naman
nam
n
Match flag: 1
Ocurance: 2
【讨论】:
所以在 Java 或 C 这样的语言中,我们需要在函数调用期间传递参数,以便函数可以访问这些变量。在这里,您在调用函数时不传递参数。这是怎么回事? 函数可能有也可能没有任何参数,它可以返回也可以不返回任何东西。某些功能可以例如优化数据库,验证程序是否成功完成并且不返回任何内容。有些函数可能有参数,用它们做一些操作然后返回结果——例如 calculator 操作为加、减、乘、幂。以上是关于从标准输入读取参数时出现意外行为的主要内容,如果未能解决你的问题,请参考以下文章