我不明白。但这不起作用。
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);
}
}
}
嗯。我应该怎么做呢?请帮助我。非常感谢!
答案 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)
您可以使用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
使用next
和last
:
# 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 next
和last
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;
}
它的功能很好。