Pascal: или не поддерживается для типов Char

Я здесь новенький, так что извините, если что-то не так!

Я делаю простую программу Pascal в Lazarus и получаю эту ошибку при компиляции:

HWE(16,18) Ошибка: операция "или" не поддерживается для типов "Char" и "Constant String"

Вот часть, на которую он жалуется:

Repeat
begin
Readln(style);
If style <> ('e' or 'mp' or 'sa') then
Writeln ('do what I say!')
end
Until style = (e or mp or sa); 

Спасибо за любую помощь!


person Mark Breweton    schedule 29.09.2010    source источник


Ответы (4)


or должен использоваться с булевыми выражениями, например

(style <> 'e') or (style <> 'mp') or (style <> 'sa')
person dan04    schedule 29.09.2010

Необходимо использовать оператор AND:

If (style <> 'e') AND (style <> 'mp') AND (style <> 'sa') then

(В этом случае не используйте оператор ИЛИ)

person thnam    schedule 20.12.2012

При объединении двух логических выражений с помощью реляционных и логических операторов будьте осторожны и не используйте круглые скобки.

person Highlights Factory    schedule 16.11.2014

В паскале есть хороший способ сделать это с помощью наборов, но только для порядковых типов (например, CHAR, но НЕ строки):

if not(style in ['e', 'm', 'p']) then
  begin
  DoSomething;
  end

Очень распространенный вариант использования, с которым я очень часто сталкиваюсь, — определить, редактируется ли TDataSet:

if MyDataSet.State in [dsEdit, dsInsert] then
  Begin
  DoSomething;
  End;
person Tuncay Göncüoğlu    schedule 27.09.2012