Ada Get_Line 不等待获取响应

标签 ada

我在一个正在开发的程序中遇到了这个奇怪的问题。如果我在完成先前的问答后尝试使用 Ada 中的 get_line 来征求用户的响应,则程序不会等待响应。我编写了一个可以复制该问题的小演示程序。在我的情况下,我无法使用无界字符串。我有使用绑定(bind)字符串的说明。

WITH Ada.Text_IO; USE Ada.Text_IO;

PROCEDURE StrPractice IS
   Name : String (1 .. 5);
   NextName : String (1 .. 10);
   Len  : Natural;

BEGIN
   Put("Enter first name? "); --5 digit terry
   Get(Name);
   new_line;
   Put_line("First Name: " & name);
   New_Line;

   Put("Enter next name:");
   Get_Line(NextName, Len);
   new_line(2);
   Put_Line("Next name: " & NextName(1..Len));
END StrPractice;

我不确定是什么导致了这个问题。我认为缓冲区可能需要清除,所以我创建了一个字符变量 c 并使用 get(c),但这并没有解决我的问题。我在这里搜索了一下,但没有看到同样的情况。任何帮助将不胜感激。

最佳答案

问题是,当您输入Name时,您必须输入换行符,程序才能看到您的输入。但是,Get 不会消耗换行符;因此,当调用 Get_Line 时,它​​会看到换行符仍在输入缓冲区中,并将其视为输入行的结尾。您可以使用 Skip_Line 来使用换行符:

Put("Enter first name? "); --5 digit terry
Get(Name);
Skip_Line;
new_line;
Put_line("First Name: " & name);
New_Line;

关于Ada Get_Line 不等待获取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28654457/

相关文章:

java - Ada 中的自引用类似于 Java "this"?

arrays - 在 Ada 中,如何使用重复数字初始化数组常量?

ada - 为 Ada Array of Records 循环生成什么代码?

unit-testing - Ada 有什么好的单元测试框架吗?

documentation - Ada - 处理子单元的 gnatdoc 问题

generics - 如何使用用户输入变量作为通用包的参数?

if-statement - Ada 中的 end if 语句与其他语言相比有什么优势

windows - 为什么通过 FFI 接口(interface)从 Rust 调用 Ada DLL 时会卡在 adainit?

ada - Ada 中的 "Missing full declaration for private type.."