为什么我的 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');

我在这里看到几个问题:

  • :=表示赋值,不是比较。如果要比较,需要用=.

  • 除非您有 变量 称为 jordenjs3252006,否则这些将需要被引用的字符串。

  • 分号是 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 (根据我上面的最终代码块)以确保编译器没有机会误解我。