条件声明不使用记录

时间:2017-10-22 11:24:45

标签: function conditional pascal procedure

如何显示在某一天购买商品的所有客户,我的代码似乎不起作用,我尝试在displayByDayPurchased过程中实现代码。对不起,如果这是一个简单的问题,我还是编程的新手。

type

Tday = (monday, tuesday);

    Tcustomer = record
        itemPurchased:string;
        dayPurchased: Tday;
    end;

    Tcustomers = array of Tcustomer;

function readDay(prompt:string): Tday;
var
    selection:Integer;
begin
    writeln('1. Monday');
    writeln('2. Tuesday');

    selection := ReadIntegerRange('Select day purcased (1 - 3): ', 1, 3);
    result := Tday(selection-1);
end;

function readCustomers(prompt:string):TCustomers;
var
    numOfCustomers:integer;
    i:integer;
begin
    numOfCustomers := ReadInteger('Enter number of customers: ');
    setLength(result, numOfCustomers);

    for i := 0 to high(result) do
    begin
        writeln(i);
        result[i].itemPurchased := ReadString('Item Purchased: ');
        result[i].dayPurchased := readDay(prompt);
    end;
end;

procedure displayByDayPurchased(customers:TCustomers);
var
    specific_day:integer;
begin
    specific_day := ReadInteger('Enter day to see items purchased');

    if (specific_day = customers.dayPurchased[specific_day])then
    begin

    end;
end; 

procedure Main();
var
    customer: Tcustomers;
begin
    customer := readCustomers('Read in customers');

end;

begin
    Main();
end.

1 个答案:

答案 0 :(得分:2)

  

我的代码似乎无法正常工作,我尝试在displayByDayPurchased过程中实现代码。

好吧,在您发布的代码中,您的displayByDayPurchased实际上没有实现任何可能导致匹配记录显示的内容,您所拥有的只是一个空begin ... end块:

if (specific_day = customers.dayPurchased[specific_day])then
begin

end;

和a)无论如何都没有正确指定匹配条件,b)它不会编译,因为Tcustomers数组没有dayPurchased字段(Tcustomer记录确实,但不是数组。)

您的代码依赖于很多未提供其定义的内容(ReadStringReadIntegerReadIntegerRange等),因此很难为您提供经过测试的解决方案。

但是displayByDayPurchased的实现应该看起来像这样:

procedure  displayByDayPurchased(customers:TCustomers);
var
    specific_day:integer;
    i : integer;
    ADay : Tday;
begin
    specific_day := ReadInteger('Enter day to see items purchased');
    ADay := Tday(specific_day); //  converts integer to TDay value

    for i := Low(customers) to High(Customers) do begin
      if customers[i].dayPurchased = ADay then begin
        writenln(customers[i].itemPurchased);
      end;
    end;
end;

我认为您的Tcustomer记录实际上包含了客户的名称,而您的代码需要修改以处理该名称。

顺便说一句,您的function readDay(prompt:string): Tday 错误;由于您对Tday的定义,readDay中允许的值应为0和1,因为Tday枚举的最低值实际上对应于零,而不是1。

此外,您没有说明您正在使用哪种Pascal编译器,但大多数现代版本允许像Tday(integerValue)这样的调用将整数转换为枚举的实例值。