我的简单Ada程序无法执行下一个命令,但是在构建和运行过程中没有关系

Cha*_*ika 2 ada

抱歉,我想问有关 Ada 语言的问题。首先,我想解释一下,我第一次学习了 Ada 语言,我正在尝试制作一个简单的程序,就像我所附的那样 -> https://pastebin.com/Z1CWUSQv

with Ada.Text_IO;
use Ada.Text_IO;

procedure Main is
Name : STRING (1..50);

begin
Put("Hallo, whats your name?");
Get(Name);

if (Name = "William") then
   Put_Line ("Hai william");
elsif (Name = "Erick") then
   Put_Line ("Hai erick");
else
   Put_Line ("i dont know, who are you!");
   end if;
end Main;
Run Code Online (Sandbox Code Playgroud)

https://i.stack.imgur.com/1fTLR.png 所以,我的问题是:当我写完代码时,我进行了构建并且成功了,之后我运行了程序,输出看起来像这个:

  • 你好你叫什么名字?(这是输出)
  • 埃里克(这是我的输入)

完成后,我按下 Enter 键,之后没有任何事情发生,程序不执行下一个命令(我做了一个 if / else 命令)

我正在使用 Gnat Studio IDE 或在线编译器 --> https://www.tutorialspoint.com/compile_ada_online.php,那么我的程序有什么问题?是否有任何我需要安装的工具等?请知道我很难找到有关此问题的参考资料。我希望所有阅读本文的人都可以帮助我。(抱歉我的英语不好)

~谢谢

Sim*_*ght 9

字符串对于 Ada 的新手来说很难掌握。在这种情况下,问题Name是 50 个字符长,所以

  • 当您调用 时Get,它要读取 50 个字符,它将继续读取直到读取到 50 个字符(或到达输入的末尾)。这就是您的程序似乎卡住的原因。
  • "William"不是 50 个字符长,因此它不可能等于Name.

您可以使用程序Get_LineARM A.10.7(18)),如下所示:

with Ada.Text_IO;
use Ada.Text_IO;

procedure Main is
   Name : STRING (1..50);
   Last : Natural;
begin
   Put("Hallo, whats your name?");
   Get_Line (Name, Last);

   if (Name (1 .. Last) = "William") then
      Put_Line ("Hai william");
   elsif (Name (1 .. Last) = "Erick") then
      Put_Line ("Hai erick");
   else
      Put_Line ("i dont know, who are you!");
   end if;
end Main;
Run Code Online (Sandbox Code Playgroud)