作为一个Ada的新手,我正在研究其语法和规则,并希望引起对下面给出的代码的关注。这里我试图设置一个变量Actual_Stiffness来保存一个常量值。它的值由以下乘积给出:
Actual_Stiffness := Stiffness_Ratio * Stiffness_Total
Stiffness_Total在规范文件Material_Data.ads中被定义为一个常量Long_Float,并且在ads文件中已经设置了它的值。
WITH Ada.Text_IO;
WITH Ada.Long_Float_Text_IO;
WITH Material_Data;
USE Material_Data;
PROCEDURE sample IS
Stiffness_Ratio : Long_Float;
Actual_Stiffness : CONSTANT Long_Float := Stiffness_Ratio * Stiffness_Total;
BEGIN -- main program
Ada.Text_IO.Put("Enter stiffness ratio: ");
Ada.Long_Float_Text_IO.Get(Item => Stiffness_Ratio);
Ada.Long_Float_Text_IO.Put(Item => Stiffness_Ratio);
--Ada.Text_IO.New_Line;
--Ada.Long_Float_Text_IO.Put(Item => Actual_Stiffness);
--Ada.Text_IO.New_Line;
--Ada.Long_Float_Text_IO.Put(Item => Stiffness_Total);
END sample;
编译时出现警告信息:
警告: “Stiffness_Ratio”可能在赋值前被引用
在运行程序时,Actual_Stiffness的值不正确。我可以将Actual_Stiffness定义为仅为Long_Float(而不添加CONSTANT),然后在我的程序中,在BEGIN之后从产品Actual_Stiffness:= Stiffness_Ratio * Stiffness_Total中获取其值,此时Stiffness_Ratio已经获得了一个值。这是正确的做法。
我的问题是:
我已将Stiffness_Total定义为具有预定值的常量Long_Float。如何定义Actual_Stiffness也为常量(因为它不会在程序中更改),同时保持用户能够交互地在终端输入Stiffness_Ratio的能力?是否可能实现这一点?
非常感谢。