为什么我的 If-Then 语句在 Pascal 中不起作用?
Why Isn't my If-Then statement working in Pascal?
我正在开发一个小程序,它要求在 pascal 中输入用户名和密码,但是我检查用户名和密码的 if-then 语句不起作用,我不确定为什么...
这是代码,请告诉我我的代码有什么问题,谢谢!
program userpas;
uses
crt;
var
un : string;
pass : string;
begin { main }
{ only for online GDB }
clrscr;
{ get username }
writeln('Please enter your username: ');
readln(un);
{ get password }
writeln('Please enter your password: ');
readln(pass);
{ verify username and password }
if un := jorden then
if pass := js3252006 then
writeln ('ACCESS GRANTED');
else writeln('incorrect username or password');
readkey;
end { main }
关于您的以下代码片段:
if un := jorden then if pass := js3252006 then writeln ('ACCESS GRANTED');
else writeln('incorrect username or password');
我在这里看到几个问题:
:=
表示赋值,不是比较。如果要比较,需要用=
.
除非您有 变量 称为 jorden
和 js3252006
,否则这些将需要被引用的字符串。
分号是 Pascal 中的语句分隔符,而不是终止符(a)。您在 if
的“真实”部分使用分号是有问题的,因为它终止了整个 if
语句,使 else
出现语法错误。
一个else
只会绑定一个if
,这意味着你实际上拥有的是下面的(一旦其他问题是固定)。
if un = 'jorden':
if pass = 'js3252006':
writeln ('ACCESS GRANTED')
else:
writeln('incorrect username or password')
因此,如果您输入 jorden
以外的用户名,您将看到 no 消息。你最好使用类似于以下内容的东西:
if (un = 'jorden') and (pass = 'js3252006') then
writeln ('ACCESS GRANTED')
else
writeln('incorrect username or password')
我把分号去掉了,因为它不属于语句本身。只有在后面有另一个声明时才需要它。
一个完整的程序,如果您想在本地(或 an online Pascal compiler site 上)进行测试,如下所示:
program PaxCode;
var un: string = 'jorden';
var pass: string = 'js3252006';
begin
if (un = 'jorden') and (pass = 'js3252006') then
begin
writeln ('ACCESS GRANTED')
end
else
begin
writeln('incorrect username or password')
end
end.
您可以简单地调整 var
语句来测试您感兴趣的所有案例。
(a) 请记住,;
是 Pascal 中的一个语句 separator,而不是一个语句 terminator. 这意味着如果使用不当,它们会严重破坏您的逻辑。我从 80 年代后期就没有学过 Pascal,但我记得 最 的一件事是 separator/terminator 的区别——这是我们的讲师真正向我们灌输的东西:-)
这也是为什么,如果我 return 到 Pascal 折叠,我会 拥抱 begin/end
(根据我上面的最终代码块)以确保编译器没有机会误解我。
我正在开发一个小程序,它要求在 pascal 中输入用户名和密码,但是我检查用户名和密码的 if-then 语句不起作用,我不确定为什么... 这是代码,请告诉我我的代码有什么问题,谢谢!
program userpas;
uses
crt;
var
un : string;
pass : string;
begin { main }
{ only for online GDB }
clrscr;
{ get username }
writeln('Please enter your username: ');
readln(un);
{ get password }
writeln('Please enter your password: ');
readln(pass);
{ verify username and password }
if un := jorden then
if pass := js3252006 then
writeln ('ACCESS GRANTED');
else writeln('incorrect username or password');
readkey;
end { main }
关于您的以下代码片段:
if un := jorden then if pass := js3252006 then writeln ('ACCESS GRANTED');
else writeln('incorrect username or password');
我在这里看到几个问题:
:=
表示赋值,不是比较。如果要比较,需要用=
.除非您有 变量 称为
jorden
和js3252006
,否则这些将需要被引用的字符串。分号是 Pascal 中的语句分隔符,而不是终止符(a)。您在
if
的“真实”部分使用分号是有问题的,因为它终止了整个if
语句,使else
出现语法错误。一个
else
只会绑定一个if
,这意味着你实际上拥有的是下面的(一旦其他问题是固定)。
if un = 'jorden':
if pass = 'js3252006':
writeln ('ACCESS GRANTED')
else:
writeln('incorrect username or password')
因此,如果您输入 jorden
以外的用户名,您将看到 no 消息。你最好使用类似于以下内容的东西:
if (un = 'jorden') and (pass = 'js3252006') then
writeln ('ACCESS GRANTED')
else
writeln('incorrect username or password')
我把分号去掉了,因为它不属于语句本身。只有在后面有另一个声明时才需要它。
一个完整的程序,如果您想在本地(或 an online Pascal compiler site 上)进行测试,如下所示:
program PaxCode;
var un: string = 'jorden';
var pass: string = 'js3252006';
begin
if (un = 'jorden') and (pass = 'js3252006') then
begin
writeln ('ACCESS GRANTED')
end
else
begin
writeln('incorrect username or password')
end
end.
您可以简单地调整 var
语句来测试您感兴趣的所有案例。
(a) 请记住,;
是 Pascal 中的一个语句 separator,而不是一个语句 terminator. 这意味着如果使用不当,它们会严重破坏您的逻辑。我从 80 年代后期就没有学过 Pascal,但我记得 最 的一件事是 separator/terminator 的区别——这是我们的讲师真正向我们灌输的东西:-)
这也是为什么,如果我 return 到 Pascal 折叠,我会 拥抱 begin/end
(根据我上面的最终代码块)以确保编译器没有机会误解我。