循环的简单问题.急啊~求大家帮帮忙.(50分)

H

huying

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟一段很菜的循环程序.如下:
begin
kuai:=19;
ffover:=false;
fenkuai:=false;kuer:=0;
if (ByteArr[kuai*16384+2])<> $ff then // 是否还有有效数据
begin
while not fenkuai do
begin
if (ByteArr[kuai*16384+15])= $ff then //语音数据分块
begin
if (ByteArr[kuai*16384-16384+15])= $ff then
begin
//inc(kuai);
showmessage(inttostr(kuai));
fenkuai:=true;
end
else
begin
//showmessage(inttostr(kuai));
datalength_boo:=false;
while not datalength_boo do
begin
ffcount:=0;
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end;
if ((ByteArr[kuai*16384+12])= $00) then
datalength_int:=datalength_int+(16312-ffcount)
else
datalength_int:=datalength_int+(16344-ffcount);
showmessage(inttostr(datalength_int));
inc(kuai);
//inc(kuer);
fenkuai:=true;
end;
end
else
begin
datalength_int:=0;
// showmessage(inttostr(kuai));
datalength_boo:=false;
while not datalength_boo do
begin
ffcount:=0;
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end; }
if ((ByteArr[kuai*16384+12])=$00) then //得到分块的总字节数
datalength_int:=datalength_int+(16312-ffcount)
else
datalength_int:=datalength_int+16344-ffcount);
showmessage(inttostr(datalength_int));
inc(kuai);
// inc(kuer);
end;
end;
end;
end;
 
问题是当我执行这段程序的时候,程序就死了.就没有响应了.好象进了死循环.但是我要是把 datalength_boo:=false;
while not datalength_boo do
begin
ffcount:=0;
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end; }
if ((ByteArr[kuai*16384+12])=$00) then //得到分块的总字节数
datalength_int:=datalength_int+(16312-ffcount)
else
datalength_int:=datalength_int+16344-ffcount);
这段去掉,整个过程又是正确的.这段代码在别的程序里同样的用又是对的!请大家帮帮忙!
 
kuai 变量 一直没有变化在这个循环中, 所以 datalength_boo一直为假, 程序进入死循环. 你代码的结构太乱了. 建议改进..
 
ffcount发生了变化啊.在ByteArr里找直到没有FF就跳出啊.
 
而且当我去掉这段,不进此循环,只执行后面的判断.问题还是在!为什么呢!
不要这个:datalength_boo:=false;
while not datalength_boo do
begin
ffcount:=0;
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end;
 
while not datalength_boo do
begin
ffcount:=0;
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end;
如果ByteArr[(kuai+1)*16384-0-1]) = $ff就进入死循环
 
这我理解,但是我的ffcount在记数,if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then 这里总会有不成立的时候.我分析我的数据得到的. 这样我就知道有多少个FF.还有,不进这个循环也死.为什么呢!我就是要知道我这段字节里从最后开始到底有多少个FF
 
是 while not datalength_boo do
begin
ffcount:=0;
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end;
的问题吗?这个循环是会检测到FF的.这是肯定的.ffcount不断在变.就在ByteArr不同的位置找,直到找到FF就退出呢.不是这样做吗?
 
你 一进循环 ffcount:=0;
只要是 ByteArr[(kuai+1)*16384-0-1]) = $ff 就死了~
你至少 ffcount:=0; 要拿到外面吧!~
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
633
import
I
I
回复
0
查看
536
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部