我有一个Ada程序,使用GNAT - GPS编译和运行都非常完美。但是当我运行exe文件并提供用户输入时,它不会显示“按任意键继续”的提示,而是立即关闭。
我在网上搜索了很多,但是只找到了与c / c ++ / visual studio控制台窗口相关的信息,使用system('pause'); OR Console.Readline()。
在Ada语言中是否有其他解决方法?
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;
注意事项
@DeeDee的回答更加便携且只使用Ada,这是首选方法,所以我的回答只适用于寻找“windows”方式的情况。
我认为有一个链接器选项可以实现,但我找不到它。更手动的方法是从C中绑定system()命令并给它一个“pause”命令,然后将其放置在程序末尾:
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;
我知道你已经提到了关于暂停的事情,但是我想展示一个例子。