有关case语句的问题~!! ( 积分: 50 )

  • 主题发起人 主题发起人 jihaiming
  • 开始时间 开始时间
J

jihaiming

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.playmsg(channelno: integer);
var
i,code:integer;
begin
case channel[channelno].step of
0: begin
startplayfile(channelno,'voc/welcome.pcm',0);
showgrid.Cells[2,channelno+1]:='摘机';
showgrid.Cells[3,channelno+1]:='欢迎致电东进公司…………';
channel[channelno].step:=1;
end;
1:begin
if checkplayend(channelno) then
begin
stopplayfile(channelno);
startrecordfile(channelno,pchar(inttostr(channelno)+'.pcm'),8000*60);//预设置录音长度为1分钟
initdtmfbuf(channelno);
channel[channelno].step:=2;
showgrid.Cells[3,channelno+1]:='开始录音';
end
end;
2:begin
code:=getdtmfcode(channelno);
if code=12 then
begin
stoprecordfile(channelno);
startplayfile(channelno,'voc/end1.pcm',0);
showgrid.Cells[3,channelno+1]:='重播留言';
channel[channelno].step:=3;
exit;
end;
if checkrecordend(channelno) then
begin
stoprecordfile(channelno);
showgrid.Cells[3,channelno+1]:='重播留言';
startplayfile(channelno,'voc/end2.pcm',0);
channel[channelno].step:=3;
end ;
end;
3:begin
if checkplayend(channelno) then
begin
cutpcm(trim(inttostr(channelno)+'.pcm'),3000)
//直接去掉末尾3000左右的声音,把最后按键声音去掉
startplayfile(channelno,pchar(inttostr(channelno)+'.pcm'),0);
channel[channelno].step:=4;
end
end;
4:begin
if checkplayend(channelno) then
begin
startplayfile(channelno,'voc/byebye.pcm',0);
channel[channelno].step:=5;
end
end;
5:begin
if checkplayend(channelno) then
begin
resetchannel(channelno);
end
end;
end;
end;
嗯,case语句应该是选择性的吧.不过看这段程序好像是那种Goto语句似的. 在这个源程序中有Timer组件.其中调用这个函数. 但如果靠Timer 组件调用是否很麻烦啊?还是Case 语句有跳转的功能呢? 高手回答!!!!
 
procedure TForm1.playmsg(channelno: integer);
var
i,code:integer;
begin
case channel[channelno].step of
0: begin
startplayfile(channelno,'voc/welcome.pcm',0);
showgrid.Cells[2,channelno+1]:='摘机';
showgrid.Cells[3,channelno+1]:='欢迎致电东进公司…………';
channel[channelno].step:=1;
end;
1:begin
if checkplayend(channelno) then
begin
stopplayfile(channelno);
startrecordfile(channelno,pchar(inttostr(channelno)+'.pcm'),8000*60);//预设置录音长度为1分钟
initdtmfbuf(channelno);
channel[channelno].step:=2;
showgrid.Cells[3,channelno+1]:='开始录音';
end
end;
2:begin
code:=getdtmfcode(channelno);
if code=12 then
begin
stoprecordfile(channelno);
startplayfile(channelno,'voc/end1.pcm',0);
showgrid.Cells[3,channelno+1]:='重播留言';
channel[channelno].step:=3;
exit;
end;
if checkrecordend(channelno) then
begin
stoprecordfile(channelno);
showgrid.Cells[3,channelno+1]:='重播留言';
startplayfile(channelno,'voc/end2.pcm',0);
channel[channelno].step:=3;
end ;
end;
3:begin
if checkplayend(channelno) then
begin
cutpcm(trim(inttostr(channelno)+'.pcm'),3000)
//直接去掉末尾3000左右的声音,把最后按键声音去掉
startplayfile(channelno,pchar(inttostr(channelno)+'.pcm'),0);
channel[channelno].step:=4;
end
end;
4:begin
if checkplayend(channelno) then
begin
startplayfile(channelno,'voc/byebye.pcm',0);
channel[channelno].step:=5;
end
end;
5:begin
if checkplayend(channelno) then
begin
resetchannel(channelno);
end
end;
end;
end;
嗯,case语句应该是选择性的吧.不过看这段程序好像是那种Goto语句似的. 在这个源程序中有Timer组件.其中调用这个函数. 但如果靠Timer 组件调用是否很麻烦啊?还是Case 语句有跳转的功能呢? 高手回答!!!!
 
自己来回答吧.
是用Timer组件进行调用来实现
但总觉得这样不是太理想.
不过我也是刚接触,不知道做通信就是这样呢?
希望和大家交个朋友~~
 
楼主的问题没明白,说点我明白的

嗯,case语句应该是选择性的吧.
----是的

不过看这段程序好像是那种Goto语句似的
----不是以回事,goto要跳到label,是跳转,case可以理解成if语句,

. 在这个源程序中有Timer组件.其中调用这个函数. 但如果靠Timer 组件调用是否很麻烦啊?
----和timer风马牛不相及

还是Case 语句有跳转的功能呢?
---case没有跳转的功能,只有选择的功能

高手回答!!!!
---不是高手,凑个热闹
 
case语句只有选择功能,如果找到匹配的值,就执行该复合语句,然后接着执行case语句后面的语句,如果没有找到任何一个匹配的项,就什么也不执行,但带else的除外。我感觉这段代码像是在一个循环中不断调用的,每隔一段时间就调用一次,从中选择一个可能的步骤来执行
 

Similar threads

D
回复
49
查看
2K
DarwinZhang
D
W
回复
16
查看
251
windlian
W
M
回复
12
查看
223
manmanchong
M
后退
顶部