Ada 如何从标准输入循环多个数据集

Ada 如何从标准输入循环多个数据集,ada,ada2012,Ada,Ada2012,我从标准输入(一个文本文件)中读取数据,并使用如下排列的数据进行计算: 2 --This states the amount of following sets of info 150 -- this is the first set of data 250 -- this is the second set of data 0 -- this is supposed to tell my program that this is the end of the two sets but

我从标准输入(一个文本文件)中读取数据,并使用如下排列的数据进行计算:

 2 --This states the amount of following sets of info
 150 -- this is the first set of data
 250 -- this is the second set of data
 0 -- this is supposed to tell my program that this is the end of the two sets but
      keep looping because there might be multiple sets in here, seperated by "0"'s. 
我的ADA计划的基本大纲:

procedure test is

begin 

  while not end_of_file loop
  ......//my whole program executes


  end loop;
end test; 

我想知道如何告诉我的程序保持循环,直到没有东西可读,但要记住,0将分离数据集,如果每个“0”之后有更多数据,则保持循环。

使用标签编写循环:

Until_Loop :
   While not end_of_file loop

      X := X + 1;
      ......//my whole program executes;

      exit Until_Loop when X > 5;//change criteria to something 
                                 //relating to no more files 
                                 //(whatever that will be)
   end loop Until_Loop;  
编辑-有关注释中嵌套循环的问题:

示例:

Named_Loop:
   for Height in TWO..FOUR loop
      for Width in THREE..5 loop
         if Height * Width = 12 then
            exit Named_Loop;
         end if;
         Put("Now we are in the nested loop and area is");
         Put(Height*Width, 5);
         New_Line;
      end loop;
   end loop Named_Loop;

使用标签编写循环:

Until_Loop :
   While not end_of_file loop

      X := X + 1;
      ......//my whole program executes;

      exit Until_Loop when X > 5;//change criteria to something 
                                 //relating to no more files 
                                 //(whatever that will be)
   end loop Until_Loop;  
编辑-有关注释中嵌套循环的问题:

示例:

Named_Loop:
   for Height in TWO..FOUR loop
      for Width in THREE..5 loop
         if Height * Width = 12 then
            exit Named_Loop;
         end if;
         Put("Now we are in the nested loop and area is");
         Put(Height*Width, 5);
         New_Line;
      end loop;
   end loop Named_Loop;

我认为该程序将满足您的要求,无需过早退出循环:

使用Ada.Integer\u Text\u Io;使用Ada.Integer\u Text\u Io;
使用Ada.Text\u Io;使用Ada.Text\u Io;
读取数据的过程是
开始
而不是结束\u文件循环的\u
声明
_集合的数量:自然;
开始
Get(集合的数量);
如果集合的数量>0,则
声明
和:整数:=0;
开始
对于1中的J..循环集合的数量
声明
Tmp:整数;
开始
Get(Tmp);
总和:=总和+Tmp;
结束;
端环;
认沽权(“总额”);
Put(集合的数量);
看跌期权(“要素是”);
投入(总和);
新线;
结束;
如果结束;
结束;
端环;
结束读取数据;
但是,它不需要集合之间的分隔符
0
0
只是表示“这是一个没有元素的集合,忽略它”

现在,如果这是一个需要检查数据一致性的问题的简化示例(即,如果您承诺了两个元素,那么在读取这两个元素后,您要么在文件末尾,要么存在一个
0
),则此解决方案不正确。(你可能会认为我在
declare
块上做得太过火了,目的是最小化变量的范围…)

输入:

1
10
0
2
20 30
3 40 50 60
程序输出:

sum of          1 elements is          10
sum of          2 elements is          50
sum of          3 elements is         150

我认为该程序将满足您的要求,无需过早退出循环:

使用Ada.Integer\u Text\u Io;使用Ada.Integer\u Text\u Io;
使用Ada.Text\u Io;使用Ada.Text\u Io;
读取数据的过程是
开始
而不是结束\u文件循环的\u
声明
_集合的数量:自然;
开始
Get(集合的数量);
如果集合的数量>0,则
声明
和:整数:=0;
开始
对于1中的J..循环集合的数量
声明
Tmp:整数;
开始
Get(Tmp);
总和:=总和+Tmp;
结束;
端环;
认沽权(“总额”);
Put(集合的数量);
看跌期权(“要素是”);
投入(总和);
新线;
结束;
如果结束;
结束;
端环;
结束读取数据;
但是,它不需要集合之间的分隔符
0
0
只是表示“这是一个没有元素的集合,忽略它”

现在,如果这是一个需要检查数据一致性的问题的简化示例(即,如果您承诺了两个元素,那么在读取这两个元素后,您要么在文件末尾,要么存在一个
0
),则此解决方案不正确。(你可能会认为我在
declare
块上做得太过火了,目的是最小化变量的范围…)

输入:

1
10
0
2
20 30
3 40 50 60
程序输出:

sum of          1 elements is          10
sum of          2 elements is          50
sum of          3 elements is         150

如果没有更多的输入,0的位置会出现什么?没有什么您不必在最后一组数据后添加“0”。请向我们展示如何读取单个数据集(带有完整的可编译示例)。如果没有更多的输入,0的位置会出现什么?没有什么您不必添加“0”在最后一组数据之后,请向我们展示如何读取单个数据集(带有完整的可编译示例)。我忘记了直到-循环。但问题是,我的程序停止运行的条件是当它到达文件末尾时。但现在我给它提供了多组数据,它只执行第一组,而忽略第二组。我想告诉它“0”在集合之间表示继续。
Until_Loop
只是一个标签,类似于C中的
goto
语句。这里的
goto
是隐式的。
exit
语句成为离开的唯一方式。请提供代码中显示它如何计算和在
0
上分支的部分,然后也许我可以提出一些建议。因为我的代码体中已经有一个不相关的直到循环,这给了我一个编译错误,说这两个直到循环相互混淆。你不能在ADA中嵌套直到循环吗?是的,你可以,使用唯一的命名标签(再次)。例如,请参见编辑。好的,他们已经解决了,但我仍然不知道在“退出时间:”中的until_循环中放置什么子句,以便我的程序知道如果存在“0”,则还有另一个集合在一个数据集的末尾。我忘记了直到循环。但问题是我的程序停止运行的标准是在它到达文件末尾时。但是现在我给它多个数据集,它只执行第一个数据集,忽略第二个。我想告诉它“0”在集合之间表示继续。
Until_Loop
只是一个标签,类似于C中的
goto
语句。这里的
goto
是隐式的。
exit
语句成为离开的唯一方式。请提供代码中显示它如何计算和在
0
上分支的部分,然后也许我可以建议点什么。因为我已经有一个与联合国有关的