Ada I / O:Put_Line在Get_Line之后无法正常工作

时间:2018-04-17 03:00:21

标签: console-application ada

我试图在Ada中进行基本的I / O,但是关于这个的文档并没有很多信息(除非我去了错误的地方)。在下面的块中,我试图测试字符串附加和输出,但由于某种原因,它实际上只输出" Hello WORLD!"我确定我错过了一些非常简单的东西,但是我已经尝试了几个小时来解决这个问题。

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Strings.Fixed; use Ada.Strings.Fixed;


procedure Main is

     usrIn : String(1..80);
     appendString : Unbounded_String;
     last : Natural;

begin
     Put_Line ("Hello WORLD!");
     Get_Line(usrIn, last);
     Put_Line ("AAAAAAAA");
     appendString := To_Unbounded_String("USER IN: ");
     Append(appendString,usrIn);
     Put_Line("Output follows");
     Put_Line(To_String(appendString));

end Main;

2 个答案:

答案 0 :(得分:5)

usrInString(1..80),即80个字符的数组。

这一行:

Append(appendString,usrIn);

将所有80个字符(大部分可能是垃圾)附加到appendString

这是last的{​​{1}}参数。

Get_Line替换为userIn。这是一个仅由userIn(userIn'First .. last)调用读取的字符组成的切片。

答案 1 :(得分:4)

如果您使用Ada 2005或更高版本进行编译,您还可以使用Get_Line的函数形式:

// create, bind, listen accept etc..

while(1)
{
    UpdateData();
    int ret = send(sock, data, dataLength , 0);

    // Check if client sent "Abort" and if so, break.
}