Ada:用键盘到达行尾

编程语言 2026-07-11

在我的Ada程序中,我尝试从键盘读取一个最多100个字符的字符串。Put_Line语句用于调试。

我发现该例程无法找到End_of_Line(行结束符)。我发现无论我使用Get_Immidiate、Get还是Get_Line,结果都是一样,行尾无法被找到。

我该如何获得结果?下面是我尝试的一段代码。

我使用GNAT Studio System,且在Windows 11上。

function Read_str return String is
   In_String : string (1 .. 100);
   Nr        : integer;
begin
   Put_Line ("Start Read_str");
   Nr := 1;
   While not End_Of_Line
   loop
      Get_Immediate(In_String(Nr));
      Put_Line("Invoer = " & integer'image(Nr));
      Put_Line("String = " & In_String(6.. Nr));
      then
         exit;
      end if;
      Nr := Nr + 1;
   end loop;
   return In_String;
end Read_str;

解决方案

Get_Immediate在从键盘读取Enter键时的行为被ARM规范描述得不清楚。GNAT在 Linux上返回LF;ObjectAda在 Windows上返回CR。End_Of_Line可能与Get_Immediate配合不佳;相反,你应该检查LF或 CR。请参阅 Password_Line 以了解一个使用Get_Immediate,从键盘读取一行(不回显)的示例,该示例对两种编译器都能工作。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章