Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
呼唤;Ada.float“文本”IO.get;从包中读取来自控制台的用户输入_Ada - Fatal编程技术网

呼唤;Ada.float“文本”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

我想在从主文件创建的包文件(.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_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