论坛风格切换切换到宽版
  • 4608阅读
  • 7回复

delphi的编译问题 [复制链接]

上一主题 下一主题
离线冯世磊
 

发帖
1212
金钱
20
威望
2
只看楼主 倒序阅读 0 发表于: 2006-01-08
今天给台湾一家企业编写程序的时候用排序,开始好好的,但是加入调整升序降序的判断后,排序大乱,语法怎么读都感觉没有问题,终于还是找到了,请大家比较一下前后2段程序,希望大家注意编译器有时候会误解你的意思哦 :233

出错的程序段
----------------------------------------------------------------------------------
//开始排序(使用选择排序法-)
for a:=0 to M_count-1 do
begin
  min:=a;
  for b:=a+1 to m_count do
  //选择升序还是降序,sort为布尔类型
    if sort then
      if tj_infor.count<tj_infor[min].count then
      min:=b
  //***注意看这部分 else是给ifsort 的,编译后给了fi tj_infor....导致排序错乱
    else
    if tj_infor.count>tj_infor[min].count then
      min:=b;
  //数值互换
  if min<>b then
    begin
    tj_temp.value:=tj_infor[a].value;   //传递临时值
    tj_temp.count:=tj_infor[a].count;
    tj_infor[a].value:=tj_infor[min].value;
    tj_infor[a].count:=tj_infor[min].count; //完成2数交换
    tj_infor[min].value:=tj_temp.value;
    tj_infor[min].count:=tj_temp.count;
    end;
end;
------------------------------------------------------------------------------------
修改后 :233
-----------------------------------------------------------------
//开始排序(使用选择排序法-)
for a:=0 to M_count-1 do
begin
  min:=a;
  for b:=a+1 to m_count do
  //选择升序还是降序,sort为布尔类型
    if sort then
    begin
      if tj_infor.count<tj_infor[min].count then
      min:=b;
    end   //2006年1月8日加入begin end ,修正了语法编译上的错误,解决不能正常排序的问题
    else
    if tj_infor.count>tj_infor[min].count then
      min:=b;
  //数值互换
  if min<>b then
    begin
    tj_temp.value:=tj_infor[a].value;   //传递临时值
    tj_temp.count:=tj_infor[a].count;
    tj_infor[a].value:=tj_infor[min].value;
    tj_infor[a].count:=tj_infor[min].count; //完成2数交换
    tj_infor[min].value:=tj_temp.value;
    tj_infor[min].count:=tj_temp.count;
    end;
end;
欢迎光临狂风软件:[kuangfeng.51vip.cn] 狂风BLOGhttp://fengshilei.51vip.cn
==============================
见他人行善,随之心生欢喜,称为随喜。《法华经.随喜功德品》载,听闻经典而随喜,次次累积,功德至大。《大智度论》则谓,随喜者的功德,胜于行善者本人。又随己所喜,亦称随喜,如布施时,富者施金帛,贫者施水草,各随所喜,皆为随喜。
离线无眠浪子

发帖
282
金钱
10
威望
1
只看该作者 1 发表于: 2006-01-08
我对D不懂!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!看看!!!!!
男人事業最重要,沒有事業,何談愛情,沒有溫馨的家,哪有似蜜的情!生活就是這樣的誰也不會欺騙誰,除非你欺騙L
离线小帆

发帖
813
金钱
10
威望
1
只看该作者 2 发表于: 2006-01-09
多重嵌套判斷是應該要嵌入begin...end段.
离线iNPRwANG

发帖
23
金钱
0
威望
0
只看该作者 3 发表于: 2006-01-09
很明显是LZ程序问题,if只和最近的else关联。
离线sarge119
发帖
*
金钱
*
威望
*
只看该作者 4 发表于: 2006-01-26
低级错误
离线sigporsson
发帖
312
金钱
0
威望
0
只看该作者 5 发表于: 2006-01-26
这种错误应该不难发现的~!
离线wongs
发帖
78
金钱
0
威望
0
只看该作者 6 发表于: 2006-01-26
如果單純要排序, 不如直接用windows 或 dos 的sort.exe, 寫一個簡單的bat文件. 例如:
sort %1 >%1.srt
或者
sort /r %1 >%1.srt
离线firstrose
发帖
9
金钱
0
威望
0
只看该作者 7 发表于: 2006-03-17
是你程序写得不对。

多层if..else嵌套不加begin/end不行。

随手加begin/end是个好习惯