通过循环获取有效的枚举数据类型输入

Taking Valid Enumeration DataType Input via Loop

我想从用户那里获取有效的枚举数据类型输入。我试过这样。 FPC 编译器表示只能使用“<>”关系运算符比较二进制数据类型。也请在 'Cham_Cham' 中说明我可以使用 Space 而不是 '_'

我不会选择 OOP。如果这是唯一的方法,那么我会去。 (在我看来,它可以不使用 OOP 方式来完成。就像不使用 try-catch 一样。)

program Enum

type Food = (Pizza, Biryani, Halwa, Cham_Cham)

var Choice: Food;

begin
   WriteLn('Pizza, Biryani, Halwa, Cham_cham');

   repeat
    WriteLn('Which Food Do you want to eat?');
    Read(Choice);
   Until Choice <> Food

WriteLn('You can eat: ' + Choice);

end. 
Until Choice <> Food

Food 是一种类型。 Choice 是一个值。您不能将类型与值进行比较。这就是错误消息告诉您的内容。如果要将输入的值与某个值进行比较,它必须是 Food 类型的另一个值。

关于你的另一个问题,语言中的名称不能包含空格。


您可能需要重新考虑如何获得此输入。就目前而言,您的代码希望用户输入序数值。我怀疑您希望用户必须输入数字。此外,这使他们能够输入无效的序数值,即超出类型范围的序数值。

更好的方法可能是要求用户输入文本,然后让您的代码将文本与食物名称进行比较,并适当地分配序号。但我真的不知道你的程序想要达到什么目的,而且它超出了这个问题的范围,无法多说。