Чтение переменной как числа и строки слов - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь получить Dep_Code для чтения в виде строки после выбора указанных параметров (1, 2 или 3).Сначала я установил целочисленное значение в моей первой программе (я думаю) и смог заставить его считывать параметры, заданные в виде слов (учетные записи ACC или другие).Однако он был случайно удален.Я пробовал разные способы заставить его даже установить Dep_Code в виде строки, но он не работает, и я продолжаю получать различные ошибки.Кстати, я не знаком с программированием, поэтому я знаю, что следующий код довольно некорректен ... но я надеюсь, что вы все можете помочь.Спасибо!

REPEAT
      writeln ('Please enter the Department Code:- ');
      writeln;
      writeln ('1. Accounts (ACC)');
      writeln ('2. Human Resources (HR)');
      writeln ('3. Operations (OP)');
      writeln;
      readln (Dep_Code);

      IF Dep_Code = 1 THEN
         Dep_Code := ('Accounts (ACC)')

      ELSE IF Dep_Code = 2 THEN
              Dep_Code := ('Human Resources(HR)')

           ELSE IF Dep_Code = 3 THEN
                   Dep_Code := ('Operations (OP)');
UNTIL ((Dep_Code >= 1) AND (Dep_Code <= 3));

1 Ответ

0 голосов
/ 10 марта 2019

Это невозможно.Паскаль является строго типизированным языком, и что-то не может быть одновременно целочисленной и строкой, и переменные также не могут изменять тип:

 IF Dep_Code = 1 THEN
     Dep_Code := ('Accounts (ACC)')

Но вы неСтрока вообще не нужна .Держите это целое число.Функции, которые обрабатывают различные объекты, могут при необходимости писать или определять такие строки.Ваша логика для меню не нуждается в строковой переменной.

Сделайте что-то вроде:

procedure HandleAccounts(var Error: Boolean);
begin
  ...
end;

// Skipped the other functions to keep this answer short ...

var
  Dep_Code: Integer;
  AllFine: Boolean;

// Skip the rest of the necessary code ...  

  repeat

    // Skipped the Writelns to keep this answer short ...

    Readln(Dep_Code);
    Error := False;

    case Dep_Code of
      1: HandleAccounts(Error);
      2: HandleHumanResources(Error);
      3: HandleOperations(Error);
    else
      Error := True;
    end;   

  until not Error;

Выше я пропустил часть кода.Вы можете заполнить пробелы, я думаю.

...