delphi7的代码 最下面是错误 说什么为什么 再帮忙改正下 谢谢了!

unitUnit1;.....varForm1:TForm1;StrO:string='0';StrL:string='.';S:string;implementatio... unit Unit1;
.....
var
Form1: TForm1;
StrO:string='0';
StrL:string='.';
S:string;
implementation

{$R *.dfm}
function AddNum(InStr:string;LabStr:string):string;
begin
case instr of //60行
stro:if (labstr<>stro) then addnum:=labstr + instr;
strl:if pos(labstr,strl)=0 then addnum:=labstr + instr;
else
addnum:=labstr + instr;
end;

procedure TForm1.BitBtn21Click(Sender: TObject); //65行
begin
s:=BitBtn21.caption;
lab1.caption:=addnum(s,lab1.caption);
end;
end.

Build
[Error] Unit1.pas(60): Ordinal type required
[Error] Unit1.pas(61): Constant expression expected
[Error] Unit1.pas(62): Constant expression expected
[Error] Unit1.pas(67): Statement expected but 'PROCEDURE' found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
展开
 我来答
qiao_liu
2012-02-23 · TA获得超过422个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:245万
展开全部
将函数function AddNum(InStr:string;LabStr:string):string;
begin
case instr of //60行
stro:if (labstr<>stro) then addnum:=labstr + instr;
strl:if pos(labstr,strl)=0 then addnum:=labstr + instr;
else
addnum:=labstr + instr;
end;
定义成如下:
function AddNum(InStr:string;LabStr:string):string;
begin
if instr=stro then begin
if (labstr<>stro) then result:=labstr + instr;
end else if instr=strl then begin
if pos(strl,labstr)=0 then result:=labstr + instr;
end else begin
result:=labstr + instr;
end;
end;

报错信息解释:
[Error] Unit1.pas(60): Ordinal type required
case后面的表达式只能接Ordinal 类型数据,不能接string类型,可以上网查查Ordinal 类型包括哪些。
[Error] Unit1.pas(61): Constant expression expected
of的分支必须是常量,而stro是字符串变量。
[Error] Unit1.pas(62): Constant expression expected
of的分支必须是常量,而strl是字符串变量。
[Error] Unit1.pas(67): Statement expected but 'PROCEDURE' found
函数function AddNum(InStr:string;LabStr:string):string缺少一个end,你代码里的end是case语句的end,缺少与begin对应的end。

由于你的输入InStr是字符串变量,不建议用case语句,改成以上if...else语句可以达到目的。

另外:
(1)我将你的pos(labstr,strl)改为pos(strl,labstr),不知道对不对,你再证实一下。pos用法中第一个参数是子字符串,第二个参数才是目标字符串,我见strl='.',只有一个字符,应该为子字符串,你应该要在labstr里找strl,不知对否,如果不是,你自己再改改吧。
(2)我将addnum改为result,因为函数返回值是给result(调用时取的也是result值),除非你特别用处,addnum有另外定义,如果另外定义,那么此函数将没有返回值,你后面lab1.caption:=addnum(s,lab1.caption);调用时会出问题。

若还无法解决,请Hi我~
百度网友3b60ea87f
2012-02-23 · TA获得超过152个赞
知道小有建树答主
回答量:284
采纳率:100%
帮助的人:173万
展开全部
Ordinal type required 需要时带序的类型(字面上翻译)
case 后面跟数值类型
修改办法
unit Unit1;
.....
var
Form1: TForm1;
StrO:string='0';
StrL:string='.';
S:string;
strLsit : TStringList;
implementation

{$R *.dfm}
formCreate事件加上
strLsit := TStringList.Create;
strList.Add(stro);
strList.Add(strl);

formClose事件加上
strList.free;
函数改为
function AddNum(InStr:string;LabStr:string):string;
begin
case strList.Indexof(instr) of //60行
0:if (labstr<>stro) then addnum:=labstr + instr;
1:if pos(labstr,strl)=0 then addnum:=labstr + instr;
else
addnum:=labstr + instr;
end;
简单调整,而且方便动态扩充
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
alctel112358
2012-02-22 · 超过30用户采纳过TA的回答
知道答主
回答量:97
采纳率:0%
帮助的人:86.8万
展开全部
在Delphi的分支语句中,只能允许使用常量(整型或者枚举类型),记忆中是这样,没有查实:),你使用的是string类型,所以报错!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式