Node:case, Next:CBoolean, Previous:Cardinal, Up:Reference

### case

#### Synopsis

    case expression of
      selector: statement;
      ...
      selector: statement;
    end;

or, with alternative statement sequence:

    case expression of
      selector: statement;
      ...
      selector: statement;
    otherwise  { ``else'' instead of ``otherwise'' is allowed }
      statement;
      ...
      statement;
    end;

or, as part of the invariant `record` type definition:

    foo = record
      field_declarations
    case bar: variant_type of
      selector: (field_declarations);
      selector: (field_declarations);
      ...
    end;

or, without a variant selector field,

    foo = record
      field_declarations
    case variant_type of
      selector: (field_declarations);
      selector: (field_declarations);
      ...
    end;

#### Description

`case` opens a case statement. For further description see case Statement.

For `case` in a variant record type definition, see Record Types.

#### Conforming to

The `case` statement is defined in ISO 7185 Pascal and supported by all known Pascal variants.

According to ISO 7185 Pascal, the selector type must be a named type. UCSD Pascal and Borland Pascal allow any ordinal type here.

The alternative statement execution with `otherwise` it is an Extended Pascal extension; with `else` it is a Borland Pascal extension. In GNU Pascal, both are allowed.

#### Example

    program CaseDemo;
    var
      Foo: String (10);
      Bar: Integer;
    begin
      WriteLn ('Enter up to ten arbitrary characters:');
      ReadLn (Foo);
      for Bar := 1 to Length (Foo) do
        begin
          Write (Foo[Bar], ' is ');
          case Foo[Bar] of
            'A' .. 'Z', 'a' .. 'z':
              WriteLn ('an English letter');
            '0' .. '9':
              WriteLn ('a number');
          otherwise
            WriteLn ('an unrecognized character')
          end
        end
    end.

#### See also

Keywords, if Statement, Record Types, else, otherwise