Ada Get_Line 没有等待回复
Ada Get_Line not waiting to get Response
我在一个程序中遇到了这个奇怪的问题。如果我尝试在 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;
我不确定是什么导致了这个问题。我想也许缓冲区需要清除,所以我创建了一个字符变量 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 在已经进行了先前的问答之后征求用户的响应,则程序不会等待响应。我整理了一个小的演示程序来复制这个问题。我不能在我的情况下使用无界字符串。我有使用绑定字符串的说明。
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;