;
is not allowed before else
in the majority of cases.
if ((input = 'y') or (input = 'Y')) then
begin
writeln ('blah blah');
end
else if ((input = 'n') or (input = 'N')) then
begin
writeln ('blah');
end
else
begin
writeln ('Input invalid!');
end;
will compile.
But... Prefer using begin
... end
brackets to avoid misunderstanding of code in complicated if then else
statements.
something like this will be better:
if ((input = 'y') or (input = 'Y')) then
begin
writeln('blah blah');
end
else
begin
if ((input = 'n') or (input = 'N')) then
begin
writeln('blah');
end
else
begin
writeln('Input invalid!');
end;
end;
The second sample is much easier to read and understand, isn't it?
The code does not work when you remove begin
and end
because there is a semicolon before else
. This will compile without errors:
if ((input = 'y') or (input = 'Y')) then
writeln('blah blah')
else
begin
end;
Appended on comment of @lurker
Please, see the following example without begin
... end
brackets.
if expr1 then
DoSmth1
else if expr2 then
if expr3 then
DoSmth2
else
DoSmth3;//Under what conditions is it called?
It is not clearly seen here, if DoSmth3
is called on not (expr2)
or (expr2) and (not (expr3))
. Though we can predict the compiler behaviour in this sample, the more complicated code without begin
... end
becomes subect to mistakes and is difficult to read. See the following code:
//behaviour 1
if expr1 then
DoSmth
else if expr2 then
begin
if expr3 then
DoSmth
end
else
DoSmth;
//behaviour 2
if expr1 then
DoSmth
else if expr2 then
begin
if expr3 then
DoSmth
else
DoSmth;
end;
Now the code behavior is obvious.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…