Ada输入和输出问题

时间:2015-07-11 15:11:32

标签: input output ada gnat

从Integer输入输入后,它将自动跳过从String获取输入。我不知道为什么?

获取String和Integer输入的简单Ada代码:

with ada.Text_IO; use ada.Text_IO;
with ada.Integer_Text_IO; use ada.Integer_Text_IO;
procedure Main is

   inputText: String (1..10);
   inputNmbr : Integer;
   StringNatural: Integer;  

begin

   Put_Line("Enter Integer");
   Get(inputNmbr,1);
   Put_Line("Enter String");
   Get_Line(inputText,StringNatural);
   Put_Line("===================");
   Put("Input for Integer: ");
   Put(inputNmbr,1);
   Put_Line("");
   Put_Line("Input for String: ");
   Put_Line(inputText(1..StringNatural));

end Main;

输出:

Enter Integer
2
Enter String
===================
Input for Integer: 2
Input for String: 

[2015-07-11 23:01:00] process terminated successfully, elapsed time: 00.86s

1 个答案:

答案 0 :(得分:6)

Get无法清除键盘缓冲区,因此您将回车发送到Get_Line作为输入。您可以在Skip_Line之后添加Get来解决此问题:

Put_Line("Enter Integer");
Get(inputNmbr,1);
Skip_Line; -- add this
Put_Line("Enter String");

Skip_Line documentation

  

Skip_Line是一个输入程序,会使输入跳到下一行。这对于从输入缓冲区中删除回车非常有用。 应在调用Get程序后执行Skip_Line。它还可用于使程序暂停并等待回车。

另请参阅:Clearing the keyboard buffer in Ada