我有 Ada 程序,可以使用 GNAT - GPS 完美运行和编译。当我运行其 exe 文件并提供用户输入时,该 exe 会立即关闭,而不是说“按任意键继续”。
我在网上搜索了很多,但我只找到了与使用 system('pause'); 的 c/c++/visual studio 控制台窗口相关的信息。或 Console.Readline()。
Ada 语言有什么办法解决这个问题吗?
除了使用Get_Line
or Get
,您还可以使用Get_Immediate
来自Ada.Text_IO https://www.adaic.org/resources/add_content/standards/12rm/html/RM-A-10-1.html包裹。不同之处在于Get_Line
and 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;
NOTES
您应该在交互式终端(Bash、PowerShell 等)中运行该程序才能实际看到效果Get_Immediate
。当您从 GPS 中运行该程序时,您仍然需要按 Enter 键才能实际退出该程序。
这可能是太多细节,但我认为Get
仍在等待<Enter>
被按下,因为它使用fgetc
来自底层的 C 标准库 (libc)(请参阅here https://gcc.gnu.org/viewcvs/gcc/trunk/gcc/ada/libgnat/a-textio.adb?view=markup#l503 and here https://gcc.gnu.org/viewcvs/gcc/trunk/gcc/ada/libgnat/a-textio.adb?view=markup#l849)。功能fgetc
从 C 流读取。 C 流最初是为交互式设备进行行缓冲的(source https://www.gnu.org/software/libc/manual/html_node/Buffering-Concepts.html#Buffering-Concepts).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)