Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi/Pascal if-then-begin和end的正确结构语法;_Delphi_Inno Setup_Pascal_Pascalscript - Fatal编程技术网

Delphi/Pascal if-then-begin和end的正确结构语法;

Delphi/Pascal if-then-begin和end的正确结构语法;,delphi,inno-setup,pascal,pascalscript,Delphi,Inno Setup,Pascal,Pascalscript,自从我上一次不得不用帕斯卡语写作以来,已经有大约20年了。在嵌套if-then块时,我似乎无法正确使用语言的结构元素,使用begin和end。例如,这会给我一个编译器错误“预期标识符” 程序初始化; 开始 日志(“初始化向导”); 如果是艾德米诺格登,那就开始吧 SetupUserGroup(); 其他程序(); else begin(*需要标识符*) 日志('用户不是管理员'); msgbox('当前用户不是管理员',mbInformation,MB_OK); 结束 结束; 结束; 当然,如

自从我上一次不得不用帕斯卡语写作以来,已经有大约20年了。在嵌套
if-then
块时,我似乎无法正确使用语言的结构元素,使用
begin
end
。例如,这会给我一个编译器错误“预期标识符”

程序初始化;
开始
日志(“初始化向导”);
如果是艾德米诺格登,那就开始吧
SetupUserGroup();
其他程序();
else begin(*需要标识符*)
日志('用户不是管理员');
msgbox('当前用户不是管理员',mbInformation,MB_OK);
结束
结束;
结束;
当然,如果我删除了
if-then
块和与其关联的
begin-end
块,那么一切都正常

有时,这种语法是正确的,结果也不错,但嵌套
if-then-else
块时,问题就变得更严重了


解决这个问题在这里是不够的。我想更好地理解如何使用这些块。我显然缺少一个概念。一些来自C++或C的东西可能从我的另一部分中渗入,并加深我的理解。我读过几篇关于它的文章,我想我理解它,但我不理解。

你必须将每个
开始
结束
匹配在同一级别,如

if条件然后
开始
剂量测定法;
结束
其他的
开始
做不同的事情;
结束;
如果愿意,可以在不影响放置的情况下缩短使用的行数。(不过,当您第一次习惯语法时,上述操作可能会更简单。)

if条件然后开始
剂量
结束,否则开始
做不同的事情;
结束;
如果您正在执行一条语句,
begin..end
是可选的。注意,第一个条件不包含终止
,因为您尚未结束语句:

if条件然后
剂量
其他的
做不同的事情;
分号在块中的最后一条语句中是可选的(尽管我通常会在可选时包含分号,以避免在添加行时出现问题,同时忘记更新前一行)

if条件然后
开始
剂量测定法;//此处需要分号
DoSomethingElse;//分号在这里是可选的
完此处需要分号,除非
//下一行是另一个“终点”。
您还可以组合单个和多个语句块:

if条件然后
开始
剂量测定法;
DoSomethingElse;
结束
其他的
做不同的事情;
如果情况如此
剂量
其他的
开始
做不同的事情;
不做任何不同的事情;
结束;
代码的正确用法是:

程序初始化;
开始
日志(“初始化向导”);
如果我是德米兰戈登的话
开始
SetupUserGroup();
其他程序();
结束
其他的
开始
日志('用户不是管理员');
msgbox('当前用户不是管理员',mbInformation,MB_OK);
结束;
结束;

不知何故,我有一个错误的印象,认为else块结束了begin块。。。。我不知道那疯狂的想法是从哪里来的。非常有用,谢谢。@mergage:如果您没有使用
begin
,则不需要
end
。请参阅上面我的第三个代码示例。非常感谢,我认为这将使我的大脑在这个主题上处于正确的状态。