假设我想从终端读取同一行上的三个变量,我想使用read函数.我会用示例输入编写类似下一个代码的内容:
10 929.1 x
var a:integer;
var b:real;
var c:char;
begin
read(a,b,c);
writeln (a, ' ', b, ' ' ,c);
end.
Run Code Online (Sandbox Code Playgroud)
我永远不会读取字符"c".我必须像这样解决它:
var a:integer;
var b:real;
var c:char;
var d:char;
begin
read(a,b,d,c);
writeln (a, ' ', b, ' ' ,c);
end.
Run Code Online (Sandbox Code Playgroud)
现在,char d将读取空格,char c将具有正确的值.
此外,如果我只想读取三个字符,输入必须是"zyx",否则我将不得不使用另一个读取来修复"xy z"的问题.
它与数字完美配合.它将读作"10 9 2"而无需额外读取.
有谁知道这背后的原因?(我用fpc和gpc尝试过)
谢谢
在编写使用Windows API函数或某些Windows DLL函数(例如ntdll.dll)的函数/过程/方法时,应该使用哪个Delphi异常类来引发最后的Win32/Win64错误?
引自Delphi XE3文档有关System.SysUtils.EExternal:
"注意:EExternal类代表Win32异常代码.ExceptionRecord成员指向Win32异常记录."
从那时起,我得出结论,Win32和Win64异常机制之间存在差异.它们之间有什么区别?
出于调试目的 - 我的意思是关于堆栈帧相关的东西 - 差异是否导致每个平台的异常处理的代码实现不同?
使用FreePascal(FPC)2.6.2我想将一些时间戳字符串从电子邮件消息转换为DateTime值(使用Synapse从IMAP服务器检索IMAPsend):
Date: Thu, 1 Aug 2013 20:07:43 -0400
Run Code Online (Sandbox Code Playgroud)
从我读过的StrToDateTime()和TFormatSettings,我没有看到一个办法直接做到这一点.他们通常期望1/8/2013 20:07:47类似于dd/mm/yyyy&等格式的字符串,hh:mm:ss并且无法处理UTC偏移.
我是否有必要首先切断并重新排列字符串并进行我自己的短月份名称和补偿的转换?
是否有一个简单的解释Wirth的源代码,甚至是一个更多评论的版本,以便我可以弄清楚它是如何工作的?
Wirths pl/0编译器在这里:http://www.moorecad.com/standardpascal/plzero.pas
我的主要目标是修改它以使用类似于Oberon的整数数组,但尽可能少地触摸代码
Oberon在此引用:http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf
我正在尝试将Treeview的一部分复制到弹出菜单中,并且根本没有任何运气我似乎无法获得递归工作,我知道我可能做错了.
以此示例图像(这是以下代码中的运行时屏幕截图):

我需要创建与Treeview具有相同关系的菜单,但我不想添加Root项.这就是我想要的样子:

请注意,第一项不是设置图标(Root),而是它们处于Treeview之类的级别.
这是我的代码:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
Menus, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Button1: TButton;
ImageList1: TImageList;
MenuItem1: TMenuItem;
PopupMenu1: TPopupMenu;
TreeView1: TTreeView;
procedure MyMenuItemClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure TreeViewToMenu(TreeView: TTreeView; BaseNode: TTreeNode; OutMenu: TMenu);
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
procedure TForm1.MyMenuItemClick(Sender: TObject);
begin
ShowMessage('You selected ' + TMenuItem(Sender).Name + ' - Tag: ' +
IntToStr(TMenuItem(Sender).Tag));
end;
procedure …Run Code Online (Sandbox Code Playgroud) 我最近一直在写不同的课程,我注意到我无意中使用两者field和property标识符读/写它们,我想知道如果有这样的话会有什么陷阱?
让我们使用基本类作为例子:
TMyClass = class
private
FName: string;
FID: Integer;
public
constructor Create(AName: string);
destructor Destroy; override;
published
property Name: string read FName write FName;
property ID: Integer read FID write FID;
end;
Run Code Online (Sandbox Code Playgroud)
由field标识符我的意思是,例如FName和FID,并且通过property标识符我的意思是Name和ID例如.
property如果我没有记错的话,发表的整个目的是能够在课程单元之外访问它.这肯定意味着field标识符应该在编写类的单元中使用,毕竟你无法field在类之外访问这些标识符.
这是我注意到的一些程序(私人或受保护),我没有使用过,FName或者FID使用property等效的,Name和ID- 或有时混合.
到目前为止,我没有看到任何问题,事实上我通常会使用FName,FID但就像我说的那样,由于某种原因无意中没有这样做.
这是不好的做法还是会导致更险恶的事情?
谢谢.
我试图为短字符串(短于64字节)实现简单的MD5.我正在使用维基百科的算法..一切都编译,但我的结果是字符串:
"hello world"
Run Code Online (Sandbox Code Playgroud)
是:
BB3BB65ED0EE1EE0BB22CB93C3CD5A8F
Run Code Online (Sandbox Code Playgroud)
虽然它应该是:
5EB63BBBE01EEED093CB22BB8F5ACDC3
Run Code Online (Sandbox Code Playgroud)
完整代码在这里:
program Prog;
uses Classes, SysUtils;
function leftrotate(x, c: Cardinal): Cardinal;
begin
leftrotate := (x shl c) or (x shr (32-c));
end;
const s: array[0..63] of Cardinal = (
7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
4, 11, 16, 23, 4, 11, 16, 23, …Run Code Online (Sandbox Code Playgroud) 我试图制作一个模拟nc(netcat)工具.打开文件并将其发送到TCP套接字.
客户(发件人)方
procedure TForm1.SpeedButton3Click(Sender: TObject);
var Client:TTCPBlockSocket;
FS: TFileStream;
begin
Client:=TTCPBlockSocket.Create;
Client.RaiseExcept:=True;
Client.Connect('192.168.1.95','9999');
FS:=TFileStream.Create('/tmp/test_print.pdf',fmOpenRead);
FS.Position:=0;
Client.SendStream(FS);
FS.Free;
Client.CloseSocket;
Client.Free;
end;
Run Code Online (Sandbox Code Playgroud)
服务器(接收方)方面
nc -l 192.168.1.95 9999> test.pdf
运行后我得到test.pdf但md5sum无效
fe2e5d86acd267ca39a9c15c456e1be0 /tmp/test_print.pdf
34d755aa81d72f525a5e691e98bed283 test.pdf
Run Code Online (Sandbox Code Playgroud)
尺寸也不同
-rw-rw---- 1 user1 DomainUsers 46444 ??? 8 17:11 /tmp/test_print.pdf
-rw-r--r-- 1 user1 DomainUsers 46448 ??? 11 15:40 test.pdf
Run Code Online (Sandbox Code Playgroud)
我做错了什么?我的错误在哪里?
ps test.pdf开头超出4个字节(6c,b5,00,00)
Run Code Online (Sandbox Code Playgroud)[user1@pandora6 /tmp]$ hexdump -C test.pdf | head -5 00000000 6c b5 00 00 25 50 44 46 2d 31 2e 34 0a 25 c7 …
我将我的项目从Delphi转移到Lazarus.在一个表单中,我有一个带参数的私有方法var Active: Boolean.在Delphi这是确定的,但拉撒路给出一个错误Error: Duplicate identifier "Active"和Hint: Identifier already defined in unit FORMS at line 641上线641有:
property Active: Boolean read FActive;
Run Code Online (Sandbox Code Playgroud)
更改参数名称(使用重构)并不困难,但为什么我不能对方法的属性和参数使用相同的名称?
为了确保它不是Delphi自动转换的错误,我在Lazarus中创建了新项目并添加了私有方法
procedure Test(var Active: Boolean);
Run Code Online (Sandbox Code Playgroud)
结果是一样的.即使我使用const或什么都不使用var.我查看了FPC文档,但未发现任何此类限制.我只是好奇.
当我搜索Free Pascal时,我非常困惑.freepascal.org表示它是一个编译器,用于在各种体系结构的系统上编译Pascal语言代码.但是,我也发现在网上寻找免费Pascal程序员的工作很少.请详细说明一下.提前致谢!
freepascal ×10
delphi ×7
lazarus ×4
pascal ×4
datetime ×1
delphi-xe ×1
md5 ×1
netcat ×1
turbo-pascal ×1