如何显示在某一天购买商品的所有客户,我的代码似乎不起作用,我尝试在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.
答案 0 :(得分:2)
我的代码似乎无法正常工作,我尝试在displayByDayPurchased过程中实现代码。
好吧,在您发布的代码中,您的displayByDayPurchased
实际上没有实现任何可能导致匹配记录显示的内容,您所拥有的只是一个空begin ... end
块:
if (specific_day = customers.dayPurchased[specific_day])then
begin
end;
和a)无论如何都没有正确指定匹配条件,b)它不会编译,因为Tcustomers
数组没有dayPurchased
字段(Tcustomer
记录确实,但不是数组。)
您的代码依赖于很多未提供其定义的内容(ReadString
,ReadInteger
,ReadIntegerRange
等),因此很难为您提供经过测试的解决方案。
但是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)
这样的调用将整数转换为枚举的实例值。