呼唤;Ada.float“文本”IO.get;从包中读取来自控制台的用户输入
我想在从主文件创建的包文件(.adb)和(.ads)中使用Ada.float_text_IO.Get,通过以下过程从控制台读取用户输入:呼唤;Ada.float“文本”IO.get;从包中读取来自控制台的用户输入,ada,Ada,我想在从主文件创建的包文件(.adb)和(.ads)中使用Ada.float_text_IO.Get,通过以下过程从控制台读取用户输入: procedure Get(Item : out Num; Width : in Field := 0); 没有任何例子。帮助:)这是一个完整的工作示例,其中包括一个包规范(floatget.ads)和一个正文(floatget.adb)以及一个单独的程序(mainfile.adb),用于调用floatget包中的Read_Floats_From_Conso
procedure Get(Item : out Num; Width : in Field := 0);
没有任何例子。帮助:)这是一个完整的工作示例,其中包括一个包规范(floatget.ads)和一个正文(floatget.adb)以及一个单独的程序(mainfile.adb),用于调用floatget包中的Read_Floats_From_Console函数 表示Ada.Float_Text_IO.Get跳过前导空格并解析文件中各种格式的Float文本值,如果使用的表单没有
file:in file_类型,则可以选择使用该表单代码>参数然后从控制台读取Get。
floatget.ads包规范的内容:
floatget.adb包体的内容:
mainfile.adb的内容:
如何编译它。。。(在Ubuntu 14.04上使用gnat 4.8.4、4.9.3、5.2.0进行测试)
示例运行,说明了几个有效的浮点值。。。
这个例子不依赖于任何特定于gnat的东西,所以应该与任何ADA95编译器一起工作,尽管目前除了gnat之外,我没有办法用其他编译器进行测试
编辑简化为仅从控制台读取,而不是根据OP的请求。有两种选择:包装过程或重命名过程
带有Ada.Text\u IO;
使用Ada.Float_Text_IO;
主要程序是
打包我的\u浮点\u文本\u IO为
程序Get_1(项:out Float;宽度:Ada.Text_IO.Field:=0);
程序Get_2(项:out Float;宽度:Ada.Text_IO.Field:=0)重命名Ada.Float_Text_IO.Get;
结束;
包体我的\u浮点\u文本\u IO为
过程Get_1(项:out Float;宽度:Ada.Text_IO.Field:=0)为
开始
Ada.Float\u Text\u IO.Get(项目、宽度);
结束;
结束;
F:浮动;
开始
My_Float_Text_IO.Get_1(F);
My_Float_Text_IO.Get_2(F);
结束;
将规范代码放入.ads文件中,将主体代码(实现代码)放入.adb文件中。
您也可以只将一个过程或函数放入.ads和.adb文件中,而不使用包。您也可以使用不带body包的规格包。欢迎使用StackOverflow。请看一下这一部分,了解用户希望提问者在提问前记住什么!由于谷歌搜索的“float\u text\u io.get”包含示例用法,我建议您自己多花点时间进行研究。如果我知道您使用了此过程:
procedure get(文件:in-File\u类型;项:out Num;宽度:in-Field:=0)代码>谢谢你的代码。当我写这篇文章时,我想到了这一点:procedure Get(Item:out Num;Width:in Field:=0)
从用户从控制台输入的内容中获取。我简化了答案,使用过程获取(Item:out Num;Width:in Field:=0)
根据请求从控制台读取,并取消使用过程Get(文件:in File_Type;项:out Num;宽度:in Field:=0)代码>从文件中读取。谢谢@linguanerd=您的示例非常完美:)非常感谢!!我现在更明白了:)
-- floatget.ads
--
-- FloatGet package specification defining procedure to read floats
-- from console
package FloatGet is
procedure Read_Floats_From_Console;
end FloatGet;
-- floatget.adb
--
-- FloatGet package body using Ada.Float_Text_IO.Get to read floats
-- from console
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Float_Text_IO;
package body FloatGet is
procedure Read_Floats_From_Console is
Val : Float;
Sum : Float := 0.0;
N : Integer := 0;
begin
Put_Line("Enter float values, one per line. Press CTRL-D when done.");
Read_Loop:
loop
exit Read_Loop when End_Of_File;
begin
Ada.Float_Text_IO.Get (Val);
exception
when Data_Error =>
Put_Line ("ERROR: Invalid float format");
exit Read_Loop;
end;
Put ("Read value = ");
Ada.Float_Text_IO.Put (Val);
Put (", ");
Ada.Float_Text_IO.Put (Val, Fore => 3, Exp => 0);
Put (", ");
Ada.Float_Text_IO.Put (Val, Aft => 2, Exp => 0);
New_Line;
Sum := Sum + Val;
N := N + 1;
end loop Read_Loop;
Put_Line ("Number of values = " & Integer'Image(N));
Put ("Sum of values = ");
Ada.Float_Text_IO.Put (Sum, Exp => 0);
New_Line;
end Read_Floats_From_Console;
end FloatGet;
-- mainfile.adb
--
-- Main program calls FloatGet.Read_Floats_From_Console
--
-- Compilation: gnatmake floatget mainfile
--
-- Usage: ./mainfile
--
with FloatGet;
procedure MainFile is
begin
FloatGet.Read_Floats_From_Console;
end MainFile;
$ gnatmake floatget mainfile
$ ./mainfile
Enter float values, one per line. Press CTRL-D when done.
1
Read value = 1.00000E+00, 1.00000, 1.00
-1
Read value = -1.00000E+00, -1.00000, -1.00
42
Read value = 4.20000E+01, 42.00000, 42.00
-42
Read value = -4.20000E+01, -42.00000, -42.00
.3
Read value = 3.00000E-01, 0.30000, 0.30
-.3
Read value = -3.00000E-01, -0.30000, -0.30
2.0e3
Read value = 2.00000E+03, 2000.00000, 2000.00
-2.0e3
Read value = -2.00000E+03, -2000.00000, -2000.00
-16#1C.#e-1
Read value = -1.75000E+00, -1.75000, -1.75
2#.11#e6
Read value = 4.80000E+01, 48.00000, 48.00
... Press CTRL-D here ...
Number of values = 10
Sum of values = 46.25000