pascal中的命令行参数

时间:2014-09-17 13:10:11

标签: command-line-arguments pascal delphi

嗨,我是pascal的新手我有一个给出结果的程序.... 我需要在给定的变量ip1和ip2中传递命令行输入。 它可以通过ParamStr [1]实现,但它不起作用请帮助我。 谢谢你提前!!!!!

  program main;
      var 
        output : integer;
      var 
        ip1 : integer;
      var 
        ip2 : integer;

    function add(input1,input2:integer) : integer;
       var
       result: integer;
    begin
       if (input1 > input2) then
          result := input1
       else
          result := input2;
       add := result;
    end;

    begin
      ip1 := 2533;**{ command line input}**
      ip2 := 555;**{ command line input}**

      output := add(ip1,ip2);
      writeln( ' output : ', output );
    end.K

2 个答案:

答案 0 :(得分:2)

正如另一个答案所说,您使用ParamCountParamStr来访问命令行参数。

ParamCount返回在命令行上传递的参数数量,因此您应首先检查它以查看您是否收到了足够的信息。

ParamStr允许您访问传递的每个参数。 ParamStr(0)总是为您提供执行程序的全名(包括路径)。使用传递它们的顺序检索其他参数,ParamStr(1)是第一个,ParamStr(ParamCount)是最后一个。使用ParamStr接收的每个值都是字符串值,因此必须先将其转换为适当的类型才能使用它。

这是一个工作示例(非常简单,并且省略了所有错误检查 - 例如,您应该使用StrToInt来保护代码,以便在提供的内容不会转换为整数时处理错误。 / p>

program TestParams;

uses
  SysUtils;

var
  Input1, Input2, Output: Integer;

begin
  if ParamCount > 1 then
  begin
    Input1 := StrToInt(ParamStr(1));
    Input2 := StrToInt(ParamStr(2));
    Output := Input1 + Input2;
    WriteLn(Format('%d + %d = %d', [Input1, Input2, Output]));
  end
  else
  begin
    WriteLn('Syntax: ', ParamStr(0));  { Just to demonstrate ParamStr(0) }
    WriteLn('There are two parameters required. You provided ', ParamCount);
  end;
  WriteLn('Press ENTER to exit...');
  ReadLn;
end.

不带参数(或只有一个)调用它会显示以下内容:

C:\Temp>TestParams
Syntax: C:\Temp\TestParams.exe
There are two parameters required. You provided 0
Press ENTER to exit...

C:\Temp>TestParams 2
Syntax: C:\Temp>TestParams.exe 2
There are two parameters required. You provided 1
Press ENTER to exit...

使用两个参数显示

C:\Temp\TestParams 2 2
2 + 2 = 4
Press ENTER to exit...

答案 1 :(得分:1)

您需要了解字符串和整数之间的区别。

要转换为123之类的整数和字符串1 2 3,您需要使用函数。 strtoint是一个这样的函数,将字符串转换为整数。 inttostr是另一个,从整数转换为字符串。

命令行数据通过paramstr(n)作为字符串提供。

intvar := strtoint(paramstr(n));

将字符串的值赋给整数变量intvar

尽管writeln具有将整数参数转换为格式化字符串的功能,但您使用它的方式是尝试输出字符串,因此您需要将整数output转换为字符串。

writeln(' output : ', inttostr(output) );

应该非常好。


var
  x : string;
  pcnt : integer;

begin
  writeln('Parameter count=',inttostr(paramcount));
  for pcnt := 1 to paramcount do
    writeln('Parameter ',pcnt, ' of ',paramcount,' = ',paramstr(pcnt));
  readln(x);
end.

应显示参数列表。

事实上,writeln过程将识别变量类型,并采取措施将值格式化为字符串,正如傲慢地指出的那样。

给我的问题是字符串和整数之间的区别。 paramstr返回一个必须转换为整数的字符串。在Pascal工作了四十多年之后,我认为初学者最好先进行转换,然后使用writeln内置的转换工具。

先走,然后跑。您首先需要了解该过程中的步骤。然后,您可以开始使用快捷方式 - 一旦掌握了基础知识。