Ada 如何在ID号中添加破折号?

Ada 如何在ID号中添加破折号?,ada,Ada,初学者问题!。我想让用户写下他/她的生日ex:19980231,然后像这样打印出来:1998-02-31。在Ada中在数字之间添加破折号看起来可能很简单,但我无法理解。有什么建议吗?这就是我已经走了多远 以下程序将输入读取为字符串,检查输入的字符数是否正确 with Ada.Text_IO; use Ada.Text_IO; procedure Birthday is Raw : String (1 .. 8); Length : Natural := 0; begin

初学者问题!。我想让用户写下他/她的生日ex:19980231,然后像这样打印出来:1998-02-31。在Ada中在数字之间添加破折号看起来可能很简单,但我无法理解。有什么建议吗?这就是我已经走了多远


以下程序将输入读取为字符串,检查输入的字符数是否正确

with Ada.Text_IO; use Ada.Text_IO;

procedure Birthday is
   Raw    : String (1 .. 8);
   Length : Natural := 0;
begin
   loop
      Put ("Enter a date in the format YYYYMMDD: ");
      Get_Line (Raw, Length);
      exit when Length = 8;
      Put_Line ("Wrong input format. Try again.");
   end loop;
   Put_Line (Raw (1 .. 4) & "-" & Raw (5 .. 6) & "-" & Raw (7 .. 8));
end Birthday;

以下程序将输入读取为字符串,检查输入的字符数是否正确

with Ada.Text_IO; use Ada.Text_IO;

procedure Birthday is
   Raw    : String (1 .. 8);
   Length : Natural := 0;
begin
   loop
      Put ("Enter a date in the format YYYYMMDD: ");
      Get_Line (Raw, Length);
      exit when Length = 8;
      Put_Line ("Wrong input format. Try again.");
   end loop;
   Put_Line (Raw (1 .. 4) & "-" & Raw (5 .. 6) & "-" & Raw (7 .. 8));
end Birthday;

是的,我们甚至不知道你是如何使用宽度的,或者你期望它做什么,或者它有什么不同。我刚刚更新了我的代码。它看起来更好,但仍然不知道如何正确地编写它。您假设整数可以容纳8位数字,这通常是正确的,但不能保证。另一种方法是将信息作为字符串读取。这是:W:=X-X;可能是打字错误;它将W设置为零。是的。现在我使用if语句来修复它,一切正常:。写这段代码应该是一种更好的方法,我想知道怎么写?您是否考虑过将输入值作为字符串而不是整数来读取?没有理由将整数转换为字符串。是的,我们甚至不知道您是如何使用宽度的,或者您希望它做什么,或者它有什么不同。我刚刚更新了代码。它看起来更好,但仍然不知道如何正确地编写它。您假设整数可以容纳8位数字,这通常是正确的,但不能保证。另一种方法是将信息作为字符串读取。这是:W:=X-X;可能是打字错误;它将W设置为零。是的。现在我使用if语句来修复它,一切正常:。写这段代码应该是一种更好的方法,我想知道怎么写?您是否考虑过将输入值作为字符串而不是整数来读取?没有理由从整数转换为字符串。这允许您输入8个以上的字符。LRM的a.10.7节将Get_Line过程描述为:从指定的输入文件中读取连续字符,并将其分配给指定字符串的连续字符。如果满足字符串的结尾,则停止读取。如果在遇到字符串的结尾之前遇到行的结尾,则读取也会停止;在这种情况下,实际上使用1的间距调用Skip_行。未指定未指定字符的值。因此,将从输入中读取最多8个字符。是的,但如果(例如)双输入早期字符中的一个,该怎么办?代码可以工作,但给出了错误的答案,并且在输入缓冲区中还剩下一个额外的字符。如果您使用Get_Line的函数形式,那么使用会更安全,您将有可能返回大于所需8个字符的字符串,而不会解决重复键入早期字符的问题。你仍然会有一个错误的答案。除非计划要求规定了正确的年、月、月范围,和日期值。您不能在程序内编辑输入。这允许您输入8个以上的字符。LRM的A.10.7节将获取行过程描述为:从指定的输入文件中读取连续字符,并将其分配给指定字符串的连续字符。如果满足字符串的结尾,则停止读取。如果在遇到字符串的结尾之前遇到行的结尾,则读取也会停止;在这种情况下,实际上使用1的间距调用Skip_行。未指定未指定字符的值。因此,将从输入中读取最多8个字符。是的,但如果(例如)双输入早期字符中的一个,该怎么办?代码可以工作,但给出了错误的答案,并且在输入缓冲区中还剩下一个额外的字符。如果您使用Get_Line的函数形式,那么使用会更安全,您将有可能返回大于所需8个字符的字符串,而不会解决重复键入早期字符的问题。你仍然会有一个错误的答案。除非程序要求指定年、月和日值的正确范围,否则无法在程序中编辑输入。