Ada Get_Line不等待获得响应

use*_*683 4 ada

我在一个我正在研究的程序中遇到这个奇怪的问题.如果我尝试在Ada中使用get_line在已经执行过先前的问答后请求使用响应,则程序不会等待响应.我已经整理了一个复制问题的小程序.我不能在我的情况下使用无界字符串.我有使用绑定字符串的说明.

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;
Run Code Online (Sandbox Code Playgroud)

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

ajb*_*ajb 6

问题是当你输入时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;
Run Code Online (Sandbox Code Playgroud)