标签: pascal

Pascal - 读/读功能杂质?

我真的很感兴趣 - 为什么你需要放

readln;
Run Code Online (Sandbox Code Playgroud)

从键盘读取一些值到变量后的行?例如,

repeat
writeln('Make your choise');
read(CH);

if (CH = '1') then begin
writeln('1');
end;

{ ... }
until CH = 'q';
Run Code Online (Sandbox Code Playgroud)

如果您运行以下代码,并在键盘上按"1",您会得到类似的输出

1
Make your choise
Make your choise
Make your choise
Run Code Online (Sandbox Code Playgroud)

另一方面,如果你添加"readln;" 这一切都很完美:

repeat
writeln('Make your choise');
read(CH);
readln;

if (CH = '1') then begin
    Writeln('1');
end

until CH = 'q';
Run Code Online (Sandbox Code Playgroud)

我唯一的猜测是,不带参数调用readln会终止读取键盘输入的过程.但如果是这样,为什么读取/读取功能无法自行停止读取输入,以避免这种笨拙?

pascal freepascal

3
推荐指数
1
解决办法
5694
查看次数

如何在 Inno Setup 中迭代 MULTI_SZ 字符串?

如何在 Inno Setup Pascal 脚本中迭代 MULTI_SZ 字符串?例如超过返回的值RegQueryMultiStringValue

scripting pascal inno-setup

3
推荐指数
1
解决办法
934
查看次数

将字符串转换为字节数组将不起作用

我想将String转换为字节数组,代码如下所示:

procedure StringToByteArray(const s : String; var tmp: array of Byte);
var
  i : integer;
begin
       For i:=1 to Length(s) do
       begin
            tmp[i-1] := Ord(s[i]);
       end;

end;
Run Code Online (Sandbox Code Playgroud)

s [i]这里是第i个String元素(= pos i处的char),我将其数值保存到tmp.

这适用于某些角色,但并非适用于所有角色,例如:

Ord('•')返回Dec(149),这是我所期望的.

但在我的程序中,Ord(s [i])返回相同角色的Dec(8226)!

Edit1:我认为缺陷在于我的其他功能"ByteArrayToStr"

转换时......

tmp:= 149    // tmp is of type byte
Log('experiment: ' + Chr(tmp));  // prints "•"
Log('experiment2 ' + IntToStr(Ord(Chr(tmp)))); // prints 149
Run Code Online (Sandbox Code Playgroud)

......来回,这似乎有效.

但是在以下函数中使用相同的转换将不会这样做:

function ByteArrayToStr( a : array of Byte ) : String;
var
  S:String;
  I:integer;
begin
     S:='';
     For I:=0 to …
Run Code Online (Sandbox Code Playgroud)

installer pascal inno-setup freepascal

3
推荐指数
1
解决办法
1530
查看次数

在 pascal 定义中传递参数

我试图用帕斯卡(freepascal)定义一些东西。与在 C++ 中一样,您可以像这样传递变量定义宏:

#define REP(i,k) for(int i=0; i<k; i++)
Run Code Online (Sandbox Code Playgroud)

你怎么能用帕斯卡做到这一点?

我在第一行添加了{$MACRO ON}命令,因此它可以运行正常的定义,而不会出现类似{$define lala:='hello world'}.

但是当我尝试{define lala(i):=i}该程序时出现错误。

如何在 Pascal 定义中传递变量参数?

macros preprocessor pascal freepascal

3
推荐指数
1
解决办法
1101
查看次数

Free Pascal本身就是一种编程语言吗?或者,只是一个支持Pascal开发的编译器?

当我搜索Free Pascal时,我非常困惑.freepascal.org表示它是一个编译器,用于在各种体系结构的系统上编译Pascal语言代码.但是,我也发现在网上寻找免费Pascal程序员的工作很少.请详细说明一下.提前致谢!

pascal freepascal

3
推荐指数
2
解决办法
734
查看次数

我可以将指针用于类吗?

我正在使用Delphi XE3.在研究了Delphi之后 - 维护对象的自引用之后,我理解类类型的变量实际上是引用对象的指针.

因此,我编写以下代码来测试它,如下所示:

TMyClass = class
public
  constructor Create(Name: string);
  destructor Destroy;

  function GetName: string;

private
  FName: string;
end;

PMyClass = ^TMyClass;

constructor TMyClass.Create(Name: string);
begin
  FName := Name;
end;

destructor TMyClass.Destroy;
begin

end;

function TMyClass.GetName: string;
begin
  Result := FName;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Item: TMyClass;
  P: PMyClass;
begin
  Item := TMyClass.Create('Jim');

  P := PMyClass(Item);

  OutputDebugString(PWideChar(Format('Address of object: %x; Address of variable Item: %x; Value of P: %x;',
                            [Integer(Item), Integer(@Item), Integer(P)])));

  OutputDebugString(PWideChar(Format('Name is %s', …
Run Code Online (Sandbox Code Playgroud)

delphi pascal

3
推荐指数
1
解决办法
152
查看次数

Delphi 函数(或 Pascal)的默认返回值

鉴于以下代码未设置返回值,返回什么?

Function MyFunction : Integer;  
begin  
end;
Run Code Online (Sandbox Code Playgroud)

delphi pascal

3
推荐指数
1
解决办法
906
查看次数

如何禁用控制台快速编辑模式

当我点击正在运行的控制台时,它会冻结应用程序,直到我完成选择,

我找到了如何使用“SetConsoleMode”在多种语言中禁用它,但找不到 Delphi 的代码

delphi console pascal console-application

3
推荐指数
1
解决办法
191
查看次数

在 Delphi 中,将 owner 设置为 Application 而不是 nil 有什么好处?

“应用程序”是 VCL 的一部分,因此不是线程安全的(可能用于维护它拥有的非线程安全组件列表)。

我正在处理的项目有几个实例,其中 Application 设置为 Owner,而 Self 不是一个选项(类方法)。鉴于变量在此函数结束时被释放,我想改为传递“nil”。

假设有人忘记释放应用程序拥有的变量:

当应用程序关闭时,内存被释放。但我也读到 Windows 会跟踪分配给每个进程的内存。因此,理论上,如果未释放 nil 拥有的变量,Windows 将在应用程序/进程终止时释放它。

那么,将所有者设置为 Application 而不是 Nil 有什么好处?

以下问题讨论了释放 nil 拥有的 vars 的责任,但仅限于此:

组件构造函数中nil owner是什么意思

memory delphi pascal

3
推荐指数
1
解决办法
154
查看次数

如何用科学记数法格式化数字

所以基本上我有这个函数返回:3.00000000000E000

function lang():extended;
begin
wynik := 0 ;
   counter := 1;
   temp :=1;
   input := 2;


   for i:= 1 to 4 do
       begin
       for k:= 1 to 4 do
       begin
       if i = k then counter := counter
       else temp := temp * ((input - a[k]) / (a[i] - a[k]));



       end;
       wynik := wynik + temp*f[i];

       temp := 1;
      end;
      Result := wynik;

end;            
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用 FloatToStr 在应用程序屏幕上打印它时,我只得到 3。

procedure TFormCalculator.Button1Click(Sender: TObject);
begin
     Edit1.Text := FloatToStr(lang());
end;
Run Code Online (Sandbox Code Playgroud)

如何保留结果的长版本?

delphi pascal lazarus

3
推荐指数
1
解决办法
145
查看次数