Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Ada:如何从命令行读取可变长度字符串_String_Command Line_Ada - Fatal编程技术网

String Ada:如何从命令行读取可变长度字符串

String Ada:如何从命令行读取可变长度字符串,string,command-line,ada,String,Command Line,Ada,我正在使用如下操作码执行一个多堆栈程序: I2 Sam I3 Bobby I1 Steve D3 I3 Jonathan “I”表示插入,数字表示哪个堆栈,“D”表示删除,数字表示哪个堆栈。我的问题是,如何从命令行中读取这些命令并确定要执行的操作?名称的长度是可变的,我不能使用堆内存。我能做的一件事是,因为可能的名称列表是已知的,所以将这些名称转换为枚举类型。谢谢 如果您正在从标准输入读取值,并且至少使用Ada 2005,此方法将起作用: with Ada.Text_IO; procedur

我正在使用如下操作码执行一个多堆栈程序:

I2 Sam
I3 Bobby
I1 Steve
D3
I3 Jonathan

“I”表示插入,数字表示哪个堆栈,“D”表示删除,数字表示哪个堆栈。我的问题是,如何从命令行中读取这些命令并确定要执行的操作?名称的长度是可变的,我不能使用堆内存。我能做的一件事是,因为可能的名称列表是已知的,所以将这些名称转换为枚举类型。谢谢

如果您正在从标准输入读取值,并且至少使用Ada 2005,此方法将起作用:

with Ada.Text_IO;

procedure Foo is
   use Ada.Text_IO;
begin
   while not End_Of_File loop
      declare
         Cur_Line : constant String := Get_Line;
      begin
         -- process the line here
      end;
   end loop;
end Foo;

如果您正在从标准输入读取值,并且至少使用Ada 2005,此方法将起作用:

with Ada.Text_IO;

procedure Foo is
   use Ada.Text_IO;
begin
   while not End_Of_File loop
      declare
         Cur_Line : constant String := Get_Line;
      begin
         -- process the line here
      end;
   end loop;
end Foo;

当你说“命令行”时,你是指从标准输入读取数据吗?后者通常指由命令名和传递给它的任何参数组成的行。(package
Ada.Command_Line
)也许,我所知道的只是我在命令行中运行程序,并且需要在程序运行时收集输入,使用“get(…)”是我知道的唯一方法,就代码@b98而言,您可以在不使用堆的情况下将可变长度的字符串读取到您的心脏内容中。你不能做的是储存它们。考虑枚举类型可能是正确的;尽管这是一个非常脆弱的解决方案。“无堆”要求是人为强加的(或者可能您正在处理一个只有1024字节RAM的MCU?)(或者有一个反堆教师!)当您说“命令行”时,是否指从标准输入读取?后者通常指由命令名和传递给它的任何参数组成的行。(package
Ada.Command_Line
)也许,我所知道的只是我在命令行中运行程序,并且需要在程序运行时收集输入,使用“get(…)”是我知道的唯一方法,就代码@b98而言,您可以在不使用堆的情况下将可变长度的字符串读取到您的心脏内容中。你不能做的是储存它们。考虑枚举类型可能是正确的;尽管这是一个非常脆弱的解决方案。“无堆”要求是一种人为的强加(或者可能您正在使用一个只有1024字节RAM的MCU?)(或者有一个反堆教师!)也许标准输入意味着一个文件?我不是在读取文件,而是在运行时读取键盘,这就是标准输入。如果您读取一个文件,则需要为该文件指定一个句柄作为参数。没有参数,它读取标准输入。哦,我明白你的意思,我没有看到Get_行没有参数,谢谢@Numnumberry:为了方便起见,您可以使用shell的I/O重定向(例如,
/Foo
)将ipnut保存在一个文件中并将其馈送到
Foo
。也许标准输入意味着一个文件?我不是在读取文件,而是在运行时读取键盘,这就是标准输入。如果您读取一个文件,则需要为该文件指定一个句柄作为参数。没有参数,它读取标准输入。哦,我明白你的意思,我没有看到Get_行没有参数,谢谢@Numnumberry:为了方便起见,您可以使用shell的I/O重定向,例如
/Foo
,将ipnut保存在一个文件中,并将其馈送到
Foo