我有Ada程序,可以使用GNAT-GPS完美运行和编译。当我运行其exe文件并提供用户输入时,而不是说“按任意键继续”,该exe将立即关闭。
我已经在线搜索了很多,但是我只使用system('pause')找到了与c / c ++ / visual studio控制台窗口有关的信息;或Console.Readline()。
在Ada lanaguage中有什么办法解决这个问题吗?
答案 0 :(得分:4)
除了使用Get_Line
或Get
,您还可以使用Ada.Text_IO
软件包中的Get_Immediate
。区别在于Get_Line
和Get
将继续读取用户输入,直到按下<Enter>
为止,而Get_Immediate
仅在标准输入时按下单个键之前才阻塞已连接到交互式设备(例如键盘)。
这是一个例子:
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
begin
-- Do some interesting stuff here...
declare
User_Response : Character;
begin
Put_Line ("Press any key to continue...");
Get_Immediate (User_Response);
end;
end Main;
注释
答案 1 :(得分:3)
@DeeDee的答案更具可移植性,只有Ada才是可取的方式,所以我的答案就是您正在寻找一种“ Windows”方式来实现它。
我认为有一个链接器选项,但找不到。一种更手动的方法是从C绑定system()命令,并给它一个“暂停”命令,并将其放在程序的末尾:
with Ada.Text_IO; use Ada.Text_IO;
with Interfaces.C.Strings;
procedure Main is
function System(Str : Interfaces.c.strings.chars_ptr) return Interfaces.C.int
with Import,
Convention => C,
External_Name => "system";
procedure Pause is
Command : Interfaces.c.Strings.chars_ptr
:= Interfaces.C.Strings.New_String("pause");
Result : Interfaces.C.int
:= System(Command);
begin
Interfaces.C.Strings.Free(Command);
end Pause;
begin
Put_Line("Hello World");
Pause;
end Main;
我知道您已经提到过有关暂停的信息,但只是想举一个例子。
答案 2 :(得分:1)
使用Console.Readline()
的方式相同,可以使用软件包Get_Line
中的Ada.Text_IO。
在这种情况下,您必须将结果放入不会使用的String
中。