| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1862 人关注过本帖
标题:提示数组下标超界?
只看楼主 加入收藏
shenkj001
Rank: 3Rank: 3
来 自:河南安阳
等 级:论坛游侠
威 望:9
帖 子:340
专家分:147
注 册:2005-5-23
结帖率:89.29%
收藏
已结贴  问题点数:20 回复次数:7 
提示数组下标超界?
运行下边代码,提示下标超界
?gcfun(63389)
FUNCTION gcfun(num)
     IF num < 1
         RETURN ""
     ENDIF     
     LOCAL a[1], c1, c2, c3, c4, c5
     ALINES(a, "一,二,三,四,五,六,七,八,九", ",")        
     c1 = num%10
     c2 = INT(num/10%10)
     c3 = int(num/100%10)
     c4 = int(num/(10*10*10))
     c5 = int(num/(10*10*10*10))  
   RETURN IIF(c5>0,IIF(c5>0,a[c5],"")+"万","")+IIF(c4>0, IIF(c4>0,a[c4],"")+"千","")+IIF(c3>0, IIF(c3>0,a[c3],"")+"百","")+IIF(c2>0, IIF(c2>0,a[c2],"")+ "十","")+;
     IIF(c2=0,IIF(c1=0,"","零"),"")+ IIF(c1>0, a[c1], "")   
     ENDIF
     ENDIF
 ENDFUNC  


[此贴子已经被作者于2017-3-27 16:24编辑过]

2017-03-27 16:03
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:20 
LOCAL a[1], c1, c2, c3, c4, c5
ALINES(a, "一,二,三,四,五,六,七,八,九", ",")
1、定义的数组是 a[1],才1个的,你应该定义a[9]
2、ALINES(a, "一,二,三,四,五,六,七,八,九", ",") 会自动生成a[1]到a[9]的
也就是说会自动定义1个A[9]的数组,此时A[1]......A[9]是可以使用的

2017-03-27 16:45
shenkj001
Rank: 3Rank: 3
来 自:河南安阳
等 级:论坛游侠
威 望:9
帖 子:340
专家分:147
注 册:2005-5-23
收藏
得分:0 
谢谢mywisdom88!如果是4位数时,即没有c5时,是不提示错的。改成5位数,有了c5就提示出错。应该不是a(1)的错,我估计是c5 = int(num/(10*10*10*10))有问题  

shenkj001@
2017-03-27 16:51
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用shenkj001在2017-3-27 16:03:54的发言:

运行下边代码,提示下标超界
?gcfun(63389)
FUNCTION gcfun(num)
     IF num < 1
         RETURN ""
     ENDIF     
     LOCAL a[1], c1, c2, c3, c4, c5
     ALINES(a, "一,二,三,四,五,六,七,八,九", ",")        
     c1 = num%10
     c2 = INT(num/10%10)
     c3 = int(num/100%10)
     c4 = int(num/(10*10*10))
     c5 = int(num/(10*10*10*10))  
   RETURN IIF(c5>0,IIF(c5>0,a[c5],"")+"万","")+IIF(c4>0, IIF(c4>0,a[c4],"")+"千","")+IIF(c3>0, IIF(c3>0,a[c3],"")+"百","")+IIF(c2>0, IIF(c2>0,a[c2],"")+ "十","")+;
     IIF(c2=0,IIF(c1=0,"","零"),"")+ IIF(c1>0, a[c1], "")   
     ENDIF
     ENDIF
 ENDFUNC  

?gcfun(63389)
 FUNCTION gcfun(num)
      IF num < 1
          RETURN ""
      ENDIF     
      LOCAL a[1], c1, c2, c3, c4, c5
      ALINES(a, "一,二,三,四,五,六,七,八,九", ",")        
      c1 = num%10
      c2 = INT(num/10%10)
      c3 = int(num/100%10)
      c4 = int(num/(10*10*10))
      c5 = int(num/(10*10*10*10))
      ?c1,c2,c3,c4,c5
*    RETURN IIF(c5>0,IIF(c5>0,a[c5],"")+"万","")+IIF(c4>0, IIF(c4>0,a[c4],"")+"千","")+IIF(c3>0, IIF(c3>0,a[c3],"")+"百","")+IIF(c2>0, IIF(c2>0,a[c2],"")+ "十","")+;
      IIF(c2=0,IIF(c1=0,"","零"),"")+ IIF(c1>0, a[c1], "")   
*      ENDIF  &&语法错误,多出
*      ENDIF &&语法错误,多出
  ENDFUNC  
参数c1,c2,c3,c4,c5的值分别是9,8,3,63,你在a[c5]就是a[63],肯定超出。
2017-03-27 16:54
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
我以前在网上找到
**人民币大写转换**
**Daxie(100)
********************************************************************************************************************
FUNCTION Daxie
PARAMETERS mmje  &&输入变量:数字型,小于9万亿,大于-9万亿
PRIVATE dx,aa,i
dx=IIF(mmje<0,'负','')
aa=ROUND(ABS(mmje)*100,0)
FOR i=LEN(ALLTRIM(STR(aa,15)))-1 to 0 STEP -1
   dx=dx+SUBS('零壹贰叁肆伍陆柒捌玖',INT(ROUND(aa/10^i,10))*2+1,2)+SUBS('分角元拾佰仟万拾佰仟亿拾佰仟万',i*2+1,2)
   aa=MOD(aa,10^i)
endf
dx=STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(dx,'零仟','零'),'零佰','零'),'零拾','零'),'零角','零'),'零分','整')
dx=STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(dx,'零零','零'),'零零','零'),'零亿','亿'),'零万','万'),'零元','元')
RETURN IIF(dx='整','零元整',STRTRAN(STRTRAN(dx,'亿万','亿'),'零整','整'))
ENDFUNC
2017-03-27 16:58
shenkj001
Rank: 3Rank: 3
来 自:河南安阳
等 级:论坛游侠
威 望:9
帖 子:340
专家分:147
注 册:2005-5-23
收藏
得分:0 
我现在改成以下代码,主要是:c4 = int(num/(10*10*10)%10);好了
?gcfun(74589)
 FUNCTION gcfun(num)
      IF num < 1
          RETURN ""
      ENDIF     
      LOCAL a(1), c1, c2, c3, c4, c5
      ALINES(a, "一,二,三,四,五,六,七,八,九", ",")        
      c1 = num%10
      c2 = INT(num/10%10)
      c3 = int(num/100%10)
      c4 = int(num/(10*10*10)%10)
      c5 = int(num/(10*10*10*10))     

    RETURN IIF(c5>0,IIF(c5>0,a[c5],"")+"万","")+IIF(c4>0, IIF(c4>0,a[c4],"")+"千","")+IIF(c3>0, IIF(c3>0,a[c3],"")+"百","")+IIF(c2>0, IIF(c2>0,a[c2],"")+ "十","")+iIF(c2=0,IIF(c1=0,"","零"),"")+ IIF(c1>0, a[c1], "")   
     
  ENDFUNC  

shenkj001@
2017-03-27 17:08
shenkj001
Rank: 3Rank: 3
来 自:河南安阳
等 级:论坛游侠
威 望:9
帖 子:340
专家分:147
注 册:2005-5-23
收藏
得分:0 
再次感谢mywisdom88的提示!

shenkj001@
2017-03-27 17:09
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用shenkj001在2017-3-27 17:09:53的发言:

再次感谢mywisdom88的提示!

你主要问题是在 a[c1],a[c2],a[c3],a[c4],a[c5]中的c1 ,c2,c3,c4,c5的值会大于9时,就报错
2017-03-27 17:19
快速回复:提示数组下标超界?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018321 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved