如何阻止控制台 window 立即关闭 |全球定位系统
How to stop console window from closing immediately | GNAT - GPS
我有 Ada 程序 运行s 并使用 GNAT - GPS 完美编译。当我 运行 它的 exe 文件并提供用户输入时,exe 会立即关闭,而不是说 "Press any key to continue"。
我在网上搜索了很多,但我只找到了与 c/c++/visual studio console window using system('pause') 有关的信息;或 Console.Readline().
在 Ada 语言中有解决这个问题的方法吗?
与使用 Console.Readline()
的方法相同,您也可以使用 Get_Line
from the package Ada.Text_IO。
在这种情况下,您必须将结果放入您不会使用的 String
。
除了使用 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;
我知道您已经提到看到暂停,但只是想举个例子。
我有 Ada 程序 运行s 并使用 GNAT - GPS 完美编译。当我 运行 它的 exe 文件并提供用户输入时,exe 会立即关闭,而不是说 "Press any key to continue"。
我在网上搜索了很多,但我只找到了与 c/c++/visual studio console window using system('pause') 有关的信息;或 Console.Readline().
在 Ada 语言中有解决这个问题的方法吗?
与使用 Console.Readline()
的方法相同,您也可以使用 Get_Line
from the package Ada.Text_IO。
在这种情况下,您必须将结果放入您不会使用的 String
。
除了使用 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;
我知道您已经提到看到暂停,但只是想举个例子。