Глиф Учебники

Ошибка — ожидалась точка с запятой

Справочник · Pascal · 2 минуты чтения

Смотрите на строку выше той, что указал компилятор: в конце предыдущего оператора нет точки с запятой. Компилятор замечает пропуск только тогда, когда встречает начало следующего оператора.

Pascal
program Demo;
begin
  writeln('Один')
  writeln('Два');
end.

Здесь ; пропущена в строке 3, а ошибку покажут на строке 4. PascalABC.NET пишет сообщение вида «Встречено 'writeln', а ожидалось ';'», Free Pascal — Fatal: Syntax error, ";" expected but "identifier WRITELN" found с номером строки в скобках после имени файла. Допишите ; после writeln('Один').

Где точка с запятой нужна, а где нет

Точка с запятой разделяет операторы и описания. Ставят её:

Не ставят:

Перед end точку с запятой можно поставить, а можно и нет: writeln('a'); end и writeln('a') end — обе записи верны.

Перед else — нельзя

Pascal
if x > 0 then
  writeln('плюс');
else
  writeln('не плюс');

Это ошибка: точка с запятой заканчивает весь оператор if, и else оказывается без пары. PascalABC.NET пишет прямо: «Перед else нельзя ставить точку с запятой». Free Pascal — Syntax error, ";" expected but "ELSE" found. Уберите ; после writeln('плюс').

С begin … end правило то же: end else, а не end; else. Исключение — оператор case: в нём точка с запятой перед else допустима.

Лишняя точка с запятой после then и do

Эти ошибки компилятор не найдёт — программа соберётся, но будет работать неправильно:

Pascal
if x > 0 then;
  writeln('плюс');

then; — условие управляет пустым оператором, а writeln выполняется всегда.

Pascal
for i := 1 to 5 do;
  writeln(i);

Цикл пять раз выполняет пустой оператор, потом writeln срабатывает один раз. А while x > 0 do; с условием, которое внутри не меняется, зацикливает программу намертво.

Если ошибка в самом конце