2017-01-16 2 views
1
program 
    Enumeration; 
uses 
    crt; 
type 
    beverage = (coffee, tea, milk, water, coke, limejuice); 
var 
    drink:beverage; 
begin`enter code here` 
    writeln('Which drink do you want?'); 
    writeln('You have ', *** , ' choices'); 
    readkey; 
end. 

Что я должен использовать в '***' здесь, чтобы получить количество элементов в списке нумерованных напитков на выходе? Я использовал sizeof(), но он дает значение байта типа. Я использую lazarus, fyi.Как получить количество элементов в перечисляемом типе в Паскале?

ответ

3

Succ(Ord(High(beverage))) должно указывать количество определенных напитков.

+1

Это может быть хорошо, чтобы добавить предупреждение , что это правильно, только если значения мы не заставлять «прыгать», например, если в списке было «молоко = 7». –

2

Вы можете использовать ORD и HIGH-LOW функции:

ord(high(beverage)) - ord(low(beverage)) + 1 

коды:

program 
    Enumeration; 
uses 
    crt; 
type 
    beverage = (coffee, tea, milk, water, coke, limejuice); 
var 
    drink:beverage; 
begin`enter code here` 
    writeln('Which drink do you want?'); 
    writeln('You have ', ord(high(beverage))-ord(low(beverage))+1 , ' choices'); 
    readkey; 
end. 

результат:

Which drink do you want? 
You have 6 choices 
Смежные вопросы