如何阻止控制台窗口立即关闭 | GNAT-GPS

2024-01-02

我有 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(使用前将#替换为@)

如何阻止控制台窗口立即关闭 | GNAT-GPS 的相关文章

  • 读取包含“[”的文件时出现 CONSTRAINT_ERROR

    我正在阅读一个简单的文本文件 一切都按其应有的方式工作 除非遇到开括号 字符 然后我得到一个 CONSTRAINT ERROR 我的职能是 GET FILE CONTENTS function Get File Contents File
  • 在 Ada 中创建子类型而不指定范围有什么意义?

    在Ada中 我经常看到这样的东西 type Number is new Integer 这有什么意义呢 难道你就不能快乐吗 Integer 我还看到过这样的代码 type Small Number is range 1 5 这对我来说是有道
  • Ada:在块语句中写入文件

    我正在处理一个数组 其长度在程序执行期间确定 所以我正在利用block我可以在其中设置数组限制的语句 我在将数组的元素写入文件时遇到问题因为我在写入过程中使用了存根 我删除了存根 使所有内容都在同一代码中 虽然现在我的代码编译并运行 它没有
  • Ada:包装概念[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 这是我之前的帖子的后续内容 Ada 了解私有类型并了解包装 一个实现Rectangular类型是使用一种实现来制作的 即Rectangular Method 1此实现需要一个规范文件和一个
  • Ada:从文件中读取

    我正在尝试读取一个包含单列的文件Long Float值在Ada如下 with Ada Text IO use Ada Text IO with Ada Long Float Text IO with Ada Sequential IO pr
  • 为什么字符串需要用初始值初始化?

    我有一根绳子lx String我想稍后在代码中设置该值 但出现错误unconstrained subtype not allowed need initialization provide initial value or explicit
  • 在 Ada 中实现具有访问类型的抽象函数

    我有一个名为 Statements 的包 其中包含一个名为 Statement 的抽象类型和一个名为execute 的抽象函数 在另一个包中 我有一个CompoundStatement 类型 它是一个Statement 类型 它实现了exe
  • “在 SPARK Ada 中接受挑战”- 后置条件下的总和鬼函数有意外行为

    我正在 SPARK Ada 中编写一个软件 它需要后置条件来验证函数返回值是否等于数组的求和值 在证明函数所在的文件后 我不断收到一个错误 该错误并没有完全加起来 没有双关语的意图 我将发布代码的屏幕截图以便更好地查看 大小为 10 的数组
  • Ada 中类型/包别名的单独声明

    我想声明一些 用户定义的编译器常量 以使我的规范文件尽可能保持 常量 这在 C 中很常见 例如 misc config hh namespace misc typedef std shared ptr a A ptr namespace a
  • Ada 中的字符串数组

    我在 Ada95 中有一个程序 我必须在其中创建一个字符串数组 该数组可以包含可变长度的字符串 例子 我已经声明了一个数组 其中所有索引都可以存储大小为 50 的字符串 当我为上面的数组分配一个较小的字符串时 我收到 约束错误 Code p
  • ADA 文件名与包名称

    我继承了一个 ADA 程序 其中源文件名和包文件名不遵循默认命名约定 ADA 对我来说是新的 所以我可能会错过一些简单的东西 但我在 GNAT Pro 用户指南中看不到它 这个类似的问题 https stackoverflow com qu
  • 将分隔的字段合并为一个

    我在 Ada 工作 我有一个非常丑陋的类型 我无法修改 我想做一些易于使用的事情 类型是这样的 for T Ugly Type Alignment use 4 for T Ugly Type Size use 48 for T Ugly T
  • 使用一个字段创建 Ada 记录

    我定义了一个类型 type Foo is record bar Positive end record 我想创建一个返回记录实例的函数 function get foo return Foo is return 1 end get foo
  • 如何在 Mac OS X 上获取内存泄漏的行编号堆栈跟踪?

    我已经成功获得了 Xcodeleaks报告我的命令行 GCC Ada 程序中的泄漏的工具 通过添加delay 11 0 最后让leaks进行检查 然后 export MallocStackLogging 1 foobar leaks foo
  • C++ 中的 Ada 子类型等效项

    C 是否提供类似于 Ada 的功能subtype缩小类型 E g type Weekday is Monday Tuesday Wednesday Thursday Friday Saturday Sunday subtype Workin
  • 使用 SPARK 证明选择排序算法

    我试图证明我在 Ada 中的选择排序实现是正确的 我尝试了一些循环不变量 但使用 gnatprove 只能证明内部循环的不变量 package body Selection with SPARK Mode is procedure Sort
  • 创建不兼容的数字子类型

    在 Ada 中 可以创建不兼容的等效数字类型 type Integer 1 is range 1 10 type Integer 2 is range 1 10 A Integer 1 8 B Integer 2 A illegal 这可以
  • Ada:如何解决“循环单元依赖”?

    假设我有两条记录 Person and Animal 每条记录都在一个单独的包中 包人 with animals use animals package persons is type person is record animalref
  • Ada 的命令行参数

    我正在编写一个 Ada 程序 该程序应该对字母字符进行大小写转换 该程序使用 1 2 或 3 个命令行参数 我几乎已经把事情写下来了 但我不知道如何进行论证 命令行参数是 单个字符指定是否要进行大写转换或小写转换 应用于输入 U 或 u 表
  • 在 Ada 中定义通用标量类型包

    我想通过制作一个用于操作多项式的 Ada 包来测试编写 Ada 包的水 可以为多种代数结构定义多项式 因此为了反映这一点 我想使该包通用 以便它可以与浮点数 整数或其他数字子类型一起使用 我现在想说 我对 Ada 的类型系统如何工作或者它的

随机推荐