用Delphi生成随机数的问题

zhaoyu_me 2006-08-16 02:35:56
我想随机取得一个TXT文件中的某一行,下面的代码中Start的作用是得到一个TXT文件共有多少行,CreateMsg是随机得到某一行内容,但我发现一个问题:变量line始终为0,而lines的值是正确的,把line:=Random(lines);改成line:=Random(4);却可以,只是有时也会为0。请问line:=Random(lines);为什么不行,要怎样才能取到1~lines之间的整数呢?

var lines:Integer


function Start:LRESULT;stdcall;export;
var
text:string;
begin
lines:=0;
AssignFile(TxtFile,'c:\text.txt');
Reset(TxtFile);
while not Eof(TxtFile) do
begin
Readln(Txtfile,Text);
lines:=lines+1;
end;
CloseFile(TxtFile);
end;

function CreateMsg:string;stdcall;
var
i,line:Integer;
Text:string;
begin
Randomize;
line:=Random(lines);
AssignFile(TxtFile,'c:\text.txt');
Reset(TxtFile);
for i:=1 to line do
Readln(Txtfile,Text);
Result:=#13+Text;
CloseFile(TxtFile);
end;
...全文
985 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoyu_me 2006-08-16
  • 打赏
  • 举报
回复
发现一个问题:我的程序中Start是在CreateMsg的后面
放到前面问题就解决了,lines是个全局变量,它的值和Start与CreateMsg的位置有关系吗?
改到前面后确实可以了,但还要在Start中加一句lines:=0;再写其他代码
delphi72 2006-08-16
  • 打赏
  • 举报
回复
Random(lines)如果Lines的值每次取随机数时都是一致的,那么Random返回的结果至少在同一台机器上是有规律的,不能达到完全随机的效果。
可测试
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := IntToStr(Random(Lines));
end;
每次按钮按下去取值是有规律的。
天涯倦客 2006-08-16
  • 打赏
  • 举报
回复
line:=Random(lines);
前 看下 lines的值。。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧