在STDIN的时候Perl ......不要理解

时间:2015-10-19 12:06:49

标签: perl

我不明白。但这不起作用。

else{
    print ("Falsch. Bitte nochmals geben Sie es!\n");
    $name = <STDIN>;
    chomp ($name);
    while ($name ne $fullname){
        print ("Falsch. Bitte nochmals geben Sie es!\n");
        $name = <STDIN>;
        chomp ($name);
        if ($sceret ne $sceretpassword){
            print ("Falsch Passwort!\n");
            $sceret = <STDIN>;
            chomp ($sceret);
        }
    }
}

嗯。我应该怎么做呢?请帮助我。非常感谢!

enter image description here

3 个答案:

答案 0 :(得分:1)

你的代码做了一些奇怪的事情。

你循环而“name”与“fullname”不匹配。

但是你在之前测试密码,你要求输入密码。

if ($sceret ne $sceretpassword){
    print ("Falsch Passwort!\n");
    $sceret = <STDIN>;
    chomp ($sceret);
}

这在技术上是有效的,因为如果你:

  • 使用正确的密码登录 - 它将失败。
  • 然后再次登录 - 以前的密码仍然会被“存储”,并且它将起作用。

这有点奇怪。

也许你的意思是:

while ($name ne $fullname
    or $sceret ne $sceretpassword ) {
    print ("Incorrect login\n");
    print "name:\n";
    $name = <STDIN>;
    chomp ($name);
    print "Password:\n";
    $sceret = <STDIN>;
    chomp ($sceret);
}

这将继续循环,直到某人获得正确的名称和密码组合。

答案 1 :(得分:1)

FürdeutscheÜbersetzungsieheunten。

您可以使用while循环重复,直到满足条件。

在您询问用户之前,您已检查密码是否正确。

这里使用两个循环。在另一个答案中,只使用了一个。它更短,但您需要next再次询问用户是否有任何数据错误。

print "Enter name: ";
$name = <STDIN>;
chomp $name;

# if the name is correct the first time, this won't run
while ($name ne $fullname){
    print "Wrong. Enter again: ";
    $name = <STDIN>;
    chomp $name;
}
print "Enter password: ";
$secret = <STDIN>;
chomp $secret;
while ($secret ne $secretpassword){
    print "Wrong. Enter again: ";
    $secret = <STDIN>;
    chomp $secret;
}
# if you are here, the name and password are correct

使用nextlast

# Infinite loop
while (1){
    print "Enter name: ";
    $name = <STDIN>;
    chomp $name;
    if ($name ne $fullname){
        print "Wrong.\n";
        # jumps to the next _round_ in the while (1) loop
        next;
    }
    print "Enter password: ";
    $secret = <STDIN>;
    chomp $secret;
    if ($secret ne $secretpassword){
        print "Wrong.\n";
        next;
    }
    # break out of the loop
    last;
}
# name and password are correct

Du kannst while benutzen,um etwas zu tun,bis es wahr ist。

Du hast das Passwort kontrolliert bevor du es abgefragt hast。 Hier wird while zweimal benutzt。在an anrenren Antwort wirst es nur einmal benutzt。 Sieistkürzer,aber du brauchst next,um den Benutzer die Daten zu fragen,wenn etwas inzwischen falsch ist。

print "Name eingeben: ";
$name = <STDIN>;
chomp $name;

# wenn der Name richtig ist, wird die Schleife gar nicht ausgefuehrt
while ($name ne $fullname){
    print "Falscher Name. Nochmal: ";
    $name = <STDIN>;
    chomp $name;
}
print "Passwort eingeben: ";
$secret = <STDIN>;
chomp $secret;
while ($secret ne $secretpassword){
    print "Falsches Passwort. Nochmal: ";
    $secret = <STDIN>;
    chomp $secret;
}
# wenn wir hier ankommen war beides richtig

Wenn du lieber nextlast benutzen willst:

# Endlosschleife
while (1){
    print "Name eingeben: ";
    $name = <STDIN>;
    chomp $name;
    if ($name ne $fullname){
        print "Falsch.\n";
        # zur naechsten _Runde_ in der while (1)-Schleife
        next;
    }
    print "Passwort eingeben: ";
    $secret = <STDIN>;
    chomp $secret;
    if ($secret ne $secretpassword){
        print "Falsch.\n";
        next;
    }
    # aus der while-Schleife herausspringen
    last;
}
# wenn wir hier ankommen war beides richtig

答案 2 :(得分:1)

非常感谢您的帮助!但我发现了一个很好的代码。它的功能很好。

my $fullname = "Markus Buergi";
my $sceretpassword = "Alpiq";
my $get_name = "Hello, your Name is ";
my $get_password = "Password is correct!";
my $wrong_name = "Wrong, Name again: ";
my $wrong_password = "Wrong, Password: ";

第二个名称是正确的,进一步

else{
    print $wrong_name;
    $name = <STDIN>;
    chomp ($name);
    while ($name ne $fullname){
        print $wrong_name;
        $name = <STDIN>;
        chomp ($name);
    }

    print $get_name, $name, "\n";

    do {
        print $wrong_password;
        $sceret = <STDIN>;
        chomp ($sceret);
    }
    until ($sceret eq $sceretpassword);
    print $get_password, "\n";
    exit;   
}

它的功能很好。