【发布时间】:2021-11-13 23:23:22
【问题描述】:
应该创建一个加载和处理命令行参数的程序。
这里有几个例子说明你运行它时的外观(粗体文本是用户将要输入的文本):
Terminal prompt % **./my_program**
No arguments given.
Terminal prompt % **./my_program 123**
Wrong amounts of arguments given.
Terminal prompt % **./my_program 10 XYZ 999 Greetings!**
Wrong amounts of arguments given.
Terminal prompt % **./my_program 3 HELLO**
Message: HELLOHELLOHELLO
The program "./my program" is ending.
Terminal prompt % **./my_program 0 Bye**
Message:
The program "./my program" is ending.
这是我目前的代码:
with Ada.Text_IO; use Ada.text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Command_Line; use Ada.Command_Line;
procedure my_program is
type String is array (Positive) of Character;
N : Integer;
Text : String;
begin
N := Argument_Count;
if N = 0 then
Put_Line("No arguments given.");
elsif N /= 2 then
Put_Line("Wrong number of arguments given.");
elsif N = 2 then
Put("Message: ");
for I in 1 .. N loop
Put(Text);
New_Line;
end loop;
Put("The program """);
Put(""" is ending. ");
end if;
end my_program;
我的程序处理前 3 三个案例,但是当我继续处理第 4 和第 5(最后一个)案例时,我在 Put(Text) 行显示错误代码
在调用“Put”时缺少参数“Item”的参数
我不知道我是否正确声明了我的字符串,因为我不想要一个特定长度的字符串。谁能想出一些可以帮助我解决案例 4 和 5 的方法?这将是很好和高度赞赏
【问题讨论】:
-
请注意,当您调用
Put(Text)时,Text尚未初始化。你的意思是使用Put(Argument(I));? -
嗯,我真的不明白你的意思。所以我有N个整数,所以当一个例子输入“5 Hi”时,它应该输入“Hi”五次(HiHiHiHiHi)。这就是我试图用我的循环做的事情。还是我应该做 Get_Line?我真的不知道
-
那么你需要获取第一个参数的整数值,然后多次打印第二个参数。您现有的代码甚至不会尝试做这些事情。
-
另一个直接的问题是您的声明
type String is array (Positive) of Character;创建了一个新的 String 类型,因此 Text 是新类型,它实际上没有“Put”方法。将其注释掉并改为With/Use Ada.Strings;。Ada.Text_IO已经为此提供了 I/O 方法。