请教数据类型转换问题(新手)(50分)

  • 主题发起人 主题发起人 policies
  • 开始时间 开始时间
P

policies

Unregistered / Unconfirmed
GUEST, unregistred user!
一、源程序如下:
program Project1;

uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
shellapi,
Winsock;


{$R *.res}

var
ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char;
Size: DWORD;
p1,p2:integer;
begin
{initialize the computer name size variable}
Size := MAX_COMPUTERNAME_LENGTH+1;

{retrieve the computer name}
if GetComputerName(ComputerName, Size) then

p1:=StrToInt(copy(StrPas(Computername),3,1));


p2:=StrToInt(copy(StrPas(Computername),4,1));


if p1=0 and p2<5 then


begin

sleep (15000);
winexec('notepad.exe',sw_show);

end;
exit;

end.

二、请问为什么编译时老提示:[错误] Project1.dpr(36): Incompatible types
 
p1:=StrToInt(copy(StrPas(Computername),3,1));
p2:=StrToInt(copy(StrPas(Computername),4,1));

你能保证Computername截到的是数字么,不能会出错。还有StrPas的参数是Pchar.

另外 if p1=0 and p2<5 then
要写成 if (p1=0) and (p2<5) then
 
我的计算机名都是这样的:ZY001-ZY254,还是不能编译。能再帮下忙吗,谢谢了。
 
就是乐天说的问题,你改了就应该可以了,
Size := MAX_COMPUTERNAME_LENGTH+1;
if GetComputerName(ComputerName, Size) then
begin
p1:=StrToInt(copy(StrPas(Computername),3,1));
p2:=StrToInt(copy(StrPas(Computername),4,1));
if (p1=0) and (p2<5) then
begin
sleep (15000);
winexec('notepad.exe',sw_show);
end;
exit;
end
你把这段考进去看看,我这边是可以编译通过的,得到了计算机名.
 
我的意思是:得到计算机名后,取计算机名的第三个和第四个字符转换为数值,并判断第三个和第四字符转换为数值后的值分别是不是=0和小于5,是的话就执行下面的程序。能再说详细的吗?我刚学没多久,在论坛是找好久了,都没找到答案。
 
我明白你的意思.if后面的表达式是必须要括起来的.
你现在编译还没通过么?
 
是啊,还是没通过。能再帮我仔细看下吗?
p1,p2:integer;//定义的类型


p1:=StrToInt(copy(StrPas(Computername),3,1));得出的值与定义的类型一致吗?
p2:=StrToInt(copy(StrPas(Computername),4,1));得出的值与定义的类型一致吗?
 
procedure TForm1.Button1Click(Sender: TObject);
const
NUMBER_CHARS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
var
ComputerName: array[0..MAX_COMPUTERNAME_LENGTH + 1] of char;
Size: DWORD;
p1, p2: integer;
s: string;
begin
{initialize the computer name size variable}
Size:= MAX_COMPUTERNAME_LENGTH + 1;
{retrieve the computer name}
if GetComputerName(ComputerName, Size) then
begin
s:= StrPas(ComputerName);
if (Length(s) >= 3) and (s[3] in NUMBER_CHARS) then
p1:= StrToInt(s[3]);
if (Length(s) >= 5) and (s[3] in NUMBER_CHARS) then
p1:= StrToInt(s[5]);
if (p1 = 0) and (p2 < 5) then
begin
sleep(15000);
winexec('notepad.exe', sw_show);
end;
end;
exit;
end;
//這個你應該可以用了,順便說明一下:
//要取字串中的字符,應該要先判斷字串有沒有那麽長,即判斷長度
//要把字串轉成數值型,應該先判斷這個字串的每一位是不是數字[0..9]
//若不這樣,程式就是不安全的,有隱患的.
//因為你說是新手,所以我就囉嗦幾句了.
 
谢谢三位大侠的帮忙~~~~~
 
多人接受答案了。
 
后退
顶部