2015-07-11 50 views
1

从Integer输入输入后,将自动从012获取来自String的输入跳过。我不知道为什么?越来越字符串和整数的投入Ada输入和输出问题

简单的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 

回答

6

Get不会清除键盘缓冲区,所以您在发送到一个回车Get_Line作为输入。你可以把一个Skip_LineGet后解决这个问题:

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

Skip_Line documentation

Skip_Line是输入程序,将导致输入跳到下一行。这对于从输入缓冲区中删除回车很有用。 Skip_Line应在任何调用Get过程之后执行。它也可用于使程序暂停并等待输入回车。

参见:Clearing the keyboard buffer in Ada

+0

这是伟大的!非常感谢您的帮助。 – user2689972

+1

请注意,关于何时调用Skip_Line的建议并不完全合适,因为您可能有案例,您想从同一行读取多个对象。 –

+0

@ipavl你能帮我在这里:http://stackoverflow.com/questions/31410589/ada-getting-string-from-text-file-and-store-in-array – user2689972