Ada 如何链接类型';将值顺序转换为整数?
我正在尝试创建一个程序,该程序从用户那里获取一个数字(从1到12),它将返回该月的短格式,例如:如果您编写Ada 如何链接类型';将值顺序转换为整数?,ada,Ada,我正在尝试创建一个程序,该程序从用户那里获取一个数字(从1到12),它将返回该月的短格式,例如:如果您编写1,它将返回JAN等 我有以下资料: type Month_Type is (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC); 但是我如何将它链接到userMonth:Integer。我认为类似于Month_Type(userMonth),但这不起作用,并且给了我错误。我唯一能想到的另一件事是为每个月的类型设置一个循环
1
,它将返回JAN
等
我有以下资料:
type Month_Type is (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC);
但是我如何将它链接到userMonth:Integer代码>。我认为类似于Month_Type(userMonth),但这不起作用,并且给了我错误。我唯一能想到的另一件事是为每个月的类型设置一个循环,并在其中设置一个计数器,以便匹配。但是这看起来很混乱,效率也不高,一定有更好的方法。在这些方法中,属性'Val
表示一个函数,它返回一个Month\u type
类型的值,其位置号等于传递给它的参数的值。例如,表达式Month\u Type'Val(0)
将计算为JAN
请注意,属性使用的内部代码不受影响。给定一个声明,例如userMonth:constant:=1
,使用表达式Month\u Type'Val(userMonth-1)
使用带有的表示子句时,实现定义的属性表示“返回表示形式与参数匹配的枚举值”的函数。使用建议的表示子句,表达式Month\u Type'Enum\u Val(userMonth)
将计算为JAN
,无需调整。其中,属性'Val
表示一个函数,该函数返回月份类型的值,其位置号等于传递给它的参数值。例如,表达式Month_Type'Val(0)
将计算为JAN
请注意,属性使用的内部代码不受影响。给定一个声明,例如userMonth:constant:=1
,使用表达式Month\u Type'Val(userMonth-1)
使用带有的表示子句时,实现定义的属性表示“返回表示形式与参数匹配的枚举值”的函数。使用建议的表示子句,表达式Month\u Type'Enum\u Val(userMonth)
将计算为JAN
,无需调整。在Ada中,您可以更轻松地进行:
带有Ada.Text\u IO;
程序演示是
类型月份\类型为(1月、2月、3月、[…]月、12月);
package Month_Text_IO是新的Ada.Text_IO.Enumeration_IO(Month_类型);
输入:月份类型;
开始
月\文本\ IO.Get(输入);
结束演示;
无需处理介于两者之间的整数值。在Ada中,您可以更轻松地处理:
带有Ada.Text\u IO;
程序演示是
类型月份\类型为(1月、2月、3月、[…]月、12月);
package Month_Text_IO是新的Ada.Text_IO.Enumeration_IO(Month_类型);
输入:月份类型;
开始
月\文本\ IO.Get(输入);
结束演示;
不需要处理中间的整数值。作为其他答案的补充,您还可以使用Ada表示子句将枚举与您喜欢的输入/输出值相匹配
如果您需要将代码与其他可能未在Ada中编码的软件进行接口,那么这非常有用
这有一些限制:如果我的记忆力好,你需要有上升的数字
因此:
作为其他答案的补充,您还可以使用Ada表示子句将枚举与您喜欢的输入/输出值相匹配
如果您需要将代码与其他可能未在Ada中编码的软件进行接口,那么这非常有用
这有一些限制:如果我的记忆力好,你需要有上升的数字
因此:
作业您可能对JAN和to forth在该类型中的职位感兴趣。为此,请查看“Pos”属性。或者简单地使用一个反映您所写内容的条件:if…1那么…returnJAN
…为什么要使用Integer
作为输入?如果仅允许用户输入1。。12
,则应使用适当的类型:类型月份号范围为1。。12;
@jacobsparrenadersen这有什么好处?如果输入13怎么办?会出错吗?没错。所以你要避免不正确的输入。。。。鼓轮<代码>Ada.Text\u IO.Integer\u IO
:-)当你用Ada编程时,有Ada语言参考手册()来查找这些东西是很有用的?您可能对JAN和to forth在该类型中的职位感兴趣。为此,请查看“Pos”属性。或者简单地使用一个反映您所写内容的条件:if…1那么…returnJAN
…为什么要使用Integer
作为输入?如果只允许用户输入1。。12
,则应使用适当的类型:类型月份号范围为1。。12;
@jacobsparrenadersen这有什么好处?如果输入13怎么办?会出错吗?没错。所以你要避免不正确的输入。。。。鼓轮<代码>Ada.Text\u IO.Integer\u IO
:-)当您在Ada中编程时,查阅Ada语言参考手册()非常有用。但是,您必须使用未选中的\u转换
将整数类型映射到月份类型
:-(见上面垃圾神的答案,了解GNAT的'Enum\u Val
。但是,你必须使用未经检查的\u转换
从整数类型映射到月份类型
:-(见上面垃圾神的答案,了解GNAT的'Enum\u Val
)。
type Month_Type is (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC);
for Month_Type use (
JAN => 1,
FEB => 2,
...);