我正在尝试创建一个简单的perl赋值,用于相等检查和goto标签概念。
用户输入数字,发生相等性检查,询问用户是否要检查更多,如果是,则重复,否则退出。为此使用"goto“
发出- y/n检查重复,y表示重复标签。即使我输入"n“,它也会一直转到标签循环。为什么包含"goto“的"if”条件没有得到满足?下面的代码
#Checking Equality
Loop: print "\Checking Equality\n";
print "Enter number for variable a\n";
$a = <stdin>;
print "Enter number for variable b\n";
$b = <stdin>;
if ( $a == $b ) {
print 'a and b are equal';
print "\n\n";
}
else {
print 'a and b are not equal';
}
print "\n\n";
print "do you want to check more? Enter y/n\n";
$c = <stdin>;
if ( $c == "y" ) {
goto Loop;
}
elsif ( $c == "n" ) {
print "Exiting\n";
}输出-
Checking Equality
Enter number for variable a
3
Enter number for variable b
4
a and b are not equal
do you want to check more? Enter y/n
n
Checking Equality #### despite of entering n goto Loop is getting executed
Enter number for variable a发布于 2020-03-11 19:33:49
use strict;
use warnings;
Loop: print "\nChecking Equality\n";
print "Enter number for variable a\n";
my $a = <stdin>;
print "Enter number for variable b\n";
my $b = <stdin>;
if ( $a == $b ) {
print 'a and b are equal';
print "\n\n";
}
else {
print 'a and b are not equal';
}
print "\n\n";
print "do you want to check more? Enter y/n\n";
chomp(my $c = <stdin>);
if ( $c eq "y" ) {
goto Loop;
}
else {
print "Exiting\n";
}发布于 2020-03-12 05:17:18
您选择了非最佳方法来使用goto的标签。
相反,循环更适合执行用户输入。用户停留在循环中,直到他/她不指定他/她准备离开。
用户的输入在用于比较之前也应该去掉换行符\n。
由于用户假设要多次提供输入,因此使用较小的子程序来打印“输入提示”、收集输入、剥离换行符并返回输入值将是有益的。通过这样做,程序变得更短,更容易阅读。
使用eq执行字符串比较操作,使用==执行数字比较。
use strict;
use warnings;
use feature 'say';
my $answer = 'y';
while( $answer eq 'y' ) {
my $num_1 = get_input('Enter variable num_1: ');
my $num_2 = get_input('Enter variable num_2: ');
my $compare = $num_1 == $num_2 ? 'EQUIAL' : 'NOT EQUIAL';
say "\nNumbers are $compare\n";
$answer = get_input('Would you like to continue? (y/n) ');
$answer = lc $answer;
say '-' x 35;
}
sub get_input {
my $msg = shift;
my $input;
print $msg;
$input = <>;
chomp $input;
return $input;
}https://stackoverflow.com/questions/60634867
复制相似问题