我在 lazaus (2.0.6) 中声明变量时遇到了奇怪的行为
如果我使用以下序列声明变量,程序会通过给出 SIGSEGV 错误来停止执行,如果我将初始值分配给 TabCellContent var 的第二个字段,则会弹出错误
TabReadActive: Boolean;
ShCol: Array[0..6] of Boolean;
TabCellContent: Array [0..6] of Array [1..50] of TCellContent;
Run Code Online (Sandbox Code Playgroud)
但是如果我将“TabReadActive”放在 Array 的声明下方,则程序正常运行而不会出错
ShCol: Array[0..6] of Boolean;
TabCellContent: Array [0..6] of Array [1..50] of TCellContent;
TabReadActive: Boolean;
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过同样的行为?这是什么原因?
我想从特定行获取文本。
前任。
列表框内容:
第 0 行 字符串 1
第 1 行 字符串 2
第 3 行 字符串 3
如何从每个示例的第 1 行获取文本?
我尝试这样做:
(listbox1.Items.Objects[1] as TText).Text
但会产生随机访问冲突......
还有别的办法吗?
免责声明:我要求“拉撒路”,因为我并不真正关心mode Delphi或mode ObjFPC......
我正在将一些代码从“Delphi 11”翻译到 Lazarus 并发现了这些:
TProc = reference to procedure(const AControl: TControl);
....
proc := MyProcedure;
Run Code Online (Sandbox Code Playgroud)
如果我是正确的,这似乎是对事件回调方法的一些托管引用。
我如何在 Lazarus 下做出等价的东西?
输入:月份名称(1月/ 2月/ .../12月)
产量:季节(冬/春/夏/秋)
冬季:12月至2月
春天:3月 - 5月
夏季:6月 - 8月
秋天:9月 - 11月
我试过了:
Program Months;
var
Month:String;
begin
writeln('Insert month name:');
readln(Month);
if Month = 'March' or Month = 'April' or Month = 'May' then
begin
writeln(Month,' is Spring month');
end
...
etc
...
end.
Run Code Online (Sandbox Code Playgroud)
但是这个程序没有用.
我对Pascal了解并且无法理解这个汇编函数出了什么问题:
{$ASMMODE intel}
function SomeType.doSomething : boolean; assembler;
var i : integer; // for testing
asm
mov EAX, field
mov i, EAX // line 42
and EAX, 4
mov i, EAX
//...
end;
Run Code Online (Sandbox Code Playgroud)
课堂宣言:
type
SomeType = class(TObject)
private
field : integer;
function doSomething : boolean;
// ...
end;
Run Code Online (Sandbox Code Playgroud)
当field(一个类的字段SomeType)为4调用此方法之前,所述IDE(拉扎勒斯)将向我报告i在管线42分配8(参照线以上编号).
是否有关于内联装配的东西,我错过了?
为什么字段的值没有EAX正确存储和/或加载?
更新:我想我可能会瞄准64位.
我不知道“xa”如何在 pascal 中转换为 10。我只是使用:
Val('xa',value,return);
Run Code Online (Sandbox Code Playgroud)
并且 value = 10,return = 0。我只是一个新手,有人可以解释一下吗?我知道这不会喜欢只是一个字符的 ASCII 原因。
我正在使用 Free Pascal :)
我在 Free Pascal 中进行了测试,当使用xa,0xa和$xa. 所以,我认为它理解像“$”、“0”这样的特殊字符而不调用它。那正确吗?
嗯,好的坏的和丑的
为什么round(cargof)留在那里2?
uses crt;
type
trail_type = (blue ,desert ,white);
fruit_class = (none ,apple ,pineapple);
type
ontherun = Record
trail : trail_type;
cargo : Integer;
miles : Integer;
end;
Var
b : File of ontherun;
rec : ontherun;
rec_b : array[1..3] of ontherun;
k , cargo , load , xload , miles , run : Integer;
cargof : Double;
fruit : fruit_class;
begin
cargof := 0;
Repeat
cargof := 0.04*cargof + 2.0;
Writeln(round(cargof));
Until cargof > …Run Code Online (Sandbox Code Playgroud) 我需要编写一个文件名包含当前日期的文件..一切都在日期之外,它给出了一个类异常'run error(3)'
(importo.text是TEdit的文本..但我想这是无关紧要的)
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
...
var
contributo:real;
f:textfile;
...
datee: string;
...
contributo:= (StrToInt(importo.text)/ 100)*4;
datee:= DateToStr(Date);
assignfile(f,'fattura minimi n.'+n.text+' '+datee+'.txt');
rewrite(f);
writeln(f,'Giovanna Migliore');
...
closefile(f);
Run Code Online (Sandbox Code Playgroud) 互联网上有类似或相同的问题,但答案对我不起作用.我们开发了多平台产品,它在Delphi的编译器和FPC下编译.首先,我用过:
Uses:
System.Character;
Run Code Online (Sandbox Code Playgroud)
和
Character.TCharacter.IsLetterOrDigit(..)
Run Code Online (Sandbox Code Playgroud)
,但它不能在FPC下编译,所以根据其他一些消息来源,我用过:
Uses:
Character;
Run Code Online (Sandbox Code Playgroud)
和
TCharacter.IsLetterOrDigit(..)
Run Code Online (Sandbox Code Playgroud)
相反,但仍然不能在FPC下编译.
有人能找到一种代码可以在Delphi编译器和FPC上工作的方法吗?我没有FPC设置与我的项目一起工作,所以我无法弄清楚,如何修复代码在FPC中工作(我只能通过构建服务器以复杂的方式测试它)并且可以'找到方法,怎么做.
我也想用正则表达式编写它,但是同事们说,这对他们来说太复杂了.
我有以下代码,结果是42,但是为什么呢?答案必须是13,因为7+6=13。
program HelloWorld;
function F (a : integer) : integer;
begin
if (a = 1) or (a = 2) then
F := 2
else
F := F(a-1) + F(a-2);
end;
begin
WriteLn(F(8));
end.
Run Code Online (Sandbox Code Playgroud) 我的程序有一个ESyntaxError类,我这样使用:
raise ESyntaxError.Create(Message)\nRun Code Online (Sandbox Code Playgroud)\n\n我将该ESyntaxError类定义如下:
ESyntaxError = class(Exception)\nRun Code Online (Sandbox Code Playgroud)\n\n我观察到,如果ESyntaxError.Create(Message)调用了该代码,我的程序\xe2\x80\x99s 退出代码将设置为1. 但在这种情况下我希望将其设置为65.
我尝试这样做:
\n\nExitCode := 65;\nraise ESyntaxError.Create(Message);\nRun Code Online (Sandbox Code Playgroud)\n\n...但是我的应用程序仍然只是以 退出1,而不是65\xe2\x80\x94 我猜是因为内置Exception类总是重置ExitCode为1?(Don\xe2\x80\x99t 确实知道 \xe2\x80\x99 是这种情况,并且在异常文档中没有看到任何明确说明这一点,但我从我在这里观察到的行为推断出这一点)。
或者,如果我想让程序具有非1/非0退出状态,我是否应该以其他方式处理这个问题而不是基于它Exception?
我被分配了要编写的程序。这是说明
问题解决与编程
您需要编写一个伪代码或绘制流程图,以接受客户的信息(名字,姓氏,性别,汽车型号,汽车类别,保险公司,TOC,是否已安装防盗设备,Premium和汽车价值)。根据电子表格部分任务B中给出的计算标准,为每个客户计算补偿金。
最后,您将要:计算完全综合保险的车辆数量b。找到最高的车辆成本c。计算安装防盗机制的所有者的比例d。提示用户输入客户名称,并搜索并显示客户信息,包括要支付的赔偿金。
这是代码`
VAR
First_Name, Last_Name, Model, Insurance_company, stop: array[1..30] of string;
Compensation, V_O_C, P_O_A, A_O_C: array [1..30] of real;
Gender: array [1..30] of char;
T_O_C, Premium, X, Count, CountA, Highest, Category: array [1..30]of integer;
Antitheft_installed: array [1..30] of boolean;
Begin
Count:=0;
CountA:=0;
Highest:=0;
FOR X = 1 to 30 DO
Repeat
Writeln ('Please enter First_Name');
Readln (First_Name[X]);
Writeln ('Please enter Last_Name');
Read Last_ Name [X]
Writeln ('Please enter Gender, M or F');
Readln Gender[X]
Until …Run Code Online (Sandbox Code Playgroud) 我有文本,我需要从文本的开头和文本的结尾删除空格.我只能用while do operator来做.我怎样才能做到这一点?这是程序代码
program RandomTeksts;
uses crt;
var
t:String;
l, x, y:Integer;
const tmin=1; tmax=30;
label
Start,
end;
begin
Start:
clrscr;
writeln('write text (from ',tmin,' to ',tmax,' chars): ');
readln(t);
l:=length(t);
if (l<tmin) or (l>tmax) then
begin
writeln('Text doesn't apply to rules!');
goto end;
end;
clrscr;
begin
randomize;
repeat
x:=random(52+1);
y:=random(80+1);
textcolor(white);
gotoxy(x,y);
writeln(t);
delay(700);
clrscr;
until keypressed;
end;
ord (readkey)<>27 then
goto Start;
end:
end.
Run Code Online (Sandbox Code Playgroud) freepascal ×13
pascal ×8
delphi ×6
lazarus ×3
alphanumeric ×1
compilation ×1
declaration ×1
exception ×1
exit-code ×1
sequence ×1
turbo-pascal ×1
variables ×1