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

时间:2016-12-19 03:42:12

标签: enums pascal freepascal

我想从用户那里获取有效的枚举数据类型输入。我试过这样的。 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. 

1 个答案:

答案 0 :(得分:1)

Until Choice <> Food

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

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

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

更好的方法可能是要求用户键入文本,然后让您的代码将文本与食物名称进行比较,并适当地分配序数。但我真的不知道你的计划正在努力实现什么,而且超出了这个问题的范围而更多地说明了这一点。