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

问题描述 投票:0回答:1

我想从用户那里获取有效的枚举数据类型输入。我试过这样:

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. 

但是,FPC 表示使用

<>
关系运算符时只能比较二进制数据类型。

我想避免 OOP,但如果这是唯一的方法,那么我会的。我希望它可以在没有 OOP 的情况下完成,就像不使用

try
catch

另外,可以在

_
中使用空格代替
Cham_Cham
吗?

enums freepascal
1个回答
1
投票
Until Choice <> Food

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

至于您的其他问题,该语言中的名称不能包含空格。


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

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

© www.soinside.com 2019 - 2024. All rights reserved.