首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有goto语句和if else条件的问题

带有goto语句和if else条件的问题
EN

Stack Overflow用户
提问于 2020-03-11 19:21:58
回答 2查看 103关注 0票数 1

我正在尝试创建一个简单的perl赋值,用于相等检查和goto标签概念。

用户输入数字,发生相等性检查,询问用户是否要检查更多,如果是,则重复,否则退出。为此使用"goto“

发出- y/n检查重复,y表示重复标签。即使我输入"n“,它也会一直转到标签循环。为什么包含"goto“的"if”条件没有得到满足?下面的代码

代码语言:javascript
复制
#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";
}

输出-

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2020-03-11 19:33:49

只需使用chomp函数删除换行符,并对字符串使用eq比较。

代码语言:javascript
复制
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";
}
票数 5
EN

Stack Overflow用户

发布于 2020-03-12 05:17:18

您选择了非最佳方法来使用goto的标签。

相反,循环更适合执行用户输入。用户停留在循环中,直到他/她不指定他/她准备离开。

用户的输入在用于比较之前也应该去掉换行符\n

由于用户假设要多次提供输入,因此使用较小的子程序来打印“输入提示”、收集输入、剥离换行符并返回输入值将是有益的。通过这样做,程序变得更短,更容易阅读。

使用eq执行字符串比较操作,使用==执行数字比较。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60634867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档