Ada Get_Line未等待响应

Ada Get_Line未等待响应,ada,Ada,在我一直在做的一个程序中,我遇到了这个奇怪的问题。如果我试图在Ada中使用get_行在已经做了之前的问答之后请求用户的响应,那么程序不会等待响应。我制作了一个小的演示程序来复制这个问题。在我的情况下,我不能使用无界字符串。我有使用绑定字符串的说明 WITH Ada.Text_IO; USE Ada.Text_IO; PROCEDURE StrPractice IS Name : String (1 .. 5); NextName : String (1 .. 10); Len

在我一直在做的一个程序中,我遇到了这个奇怪的问题。如果我试图在Ada中使用get_行在已经做了之前的问答之后请求用户的响应,那么程序不会等待响应。我制作了一个小的演示程序来复制这个问题。在我的情况下,我不能使用无界字符串。我有使用绑定字符串的说明

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),但这并没有纠正我的问题。我在这里搜索了一下,但没有看到同样的情况。任何帮助都将不胜感激。

问题是,当您输入
名称时,必须先输入换行符,程序才能看到您的输入。但是,
Get
不使用换行符;因此,当调用
Get_Line
时,它会看到换行符仍在输入缓冲区中,并将其视为输入行的结尾。您可以使用
Skip\u Line
使用换行符:

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

毫无疑问,在输入
名称
之后,您正在按Enter键,但是
Get
不会占用行尾。因此,当您稍后调用
Get\u Line
时,它仍然在缓冲区中。尝试添加对
Skip_Line
的呼叫以使用该行的结尾。祝福您!是的,这纠正了问题。我以为这是在抢夺我的入场券,但就我个人而言,我不知道该如何应对。非常感谢你!好的,那我就把它作为答案贴出来。