-
排序时候,
排序的权重计算temp_arr[i]=(output[i].n_py)*(12/(output[i].n_ch))+output[i].n_py-strlen(input_pystr)
其中(output[i].n_py/(output[i].n_ch)
计算的平均每个字多少个拼音字母,但是output[i].n_ch
=1或2或3或4,这样除容易丢掉余数,间接降低权重,于是增加权重,减去剩余拼音串output[i].n_py-strlen(input_pystr)
,但是有个新的问题,有些单字母单字前面1/1*12=12,当剩余字母超过12,这么计算出现负数,负数的补码比较大,权重就出问题。
解决办法:前面倍数12改为24,改为temp_arr[i]=(output[i].n_py)*(24/(output[i].n_ch))+output[i].n_py-strlen(input_pystr)
因为最大strlen(input_pystr)=25,
这样就避免负数,两个权重平均每个字多少个拼音字母和剩余拼音串都用上了。 -
索引库,用定义
unsigned char cy1len
,但是实际计算cy1len=399=0x18F
,得到的cy1len=0x8F
,与实际不符
解决办法:用unsigned int cy1len
定义,有时候要根据数据大小合理定义数据类型呀u8=255,u16=65535.
-
程序中用pbuff变量记录搜索得到的结果。我开始是在触控选择中对pbuff 进行清零操作,但是当连续输入拼音时候,每次都会重新分词并查词,于是pbuff一直在增加。
修改办法:每次有新的输入,前面的结果要清除,所以进行分词查词时候,需要清零操作,pbuff=0呀 -
在一个函数中,用指针传递变量,当清零操作后,根据变量是否清零进行下一步操作,代码却写的
{*pbuff=0} if(!pbuff){write}
下一个判断没加*好变成传递指针的地址了,地址不会变,永远不为零,永远进不去这个write操作了,正确的应该是if(!(*pbuff))
什么时候传参,什么时候传指针,什么时候传二级指针:(1)当只是传递变量数值进函数,不需要修改时候,直接传参数就好了;(2)当要需要对变量进行修改,就需要传指针,将变量地址传进去,修改地址里的值;(3)当只需要将指针地址传进去,不需要修改指针地址,也仅仅用传指针就行;(4)当需要修改指针的值,即修改指针指向的地址,这个时候就需要传二级指针,将指针本身地址传进去,修改这个地址指向的地址,就修改指针的值了。(5)另外,数组名是个常量指针,其值不能修改
,也就是它指向的地址一致不会变,需要用到时候,则需要重新定义一个指针,将数组名的值赋给新指针,修改这个新指针就可以实现了。 -
翻页操作时候,
(*p1_b)-=(p1blen_0-(*p1blen)); (*p1blen)=p1blen_0;
然后(*p1_f)-=(24+(*p1blen)-p1blen_0);(*p1flen)=24+(*p1blen)-p1blen_0;
这样顺序错了,导致p1_f和p1flen都错了。应该是先用p1blen计算完p1_f和p1flen,最后才计算(*p1blen)=p1blen_0;
。变量利用完才能重新赋值呀。还有,表明页数的这个page变量在每次有新的输入时候,都得清零一次,不然一次输入翻页过,下次输入进来,这个变量值还在。会导致翻页出错。 -
输入数字、标点等时候,pylen这个变量没赋值,。导致choosecy函数中if(!(*pylen))这个条件总是成立,本来不该进去的流程进去了。既然会影响后续流程,那么pylen应该主动改变
-
删除或者消除拼音,空拼音字符进入分词流程后,导致后续有新的输入,不出分词结果,屏上是空的.
这个bug不知道出在哪里,根据现象得出是字符串导致的,那个加个条件(input_pystr[0]>0x60)
判断,只有有字母输入才进分词,如果字符串为空if(input_pystr[0]==0)
,就直接另外操作了write_dgusii_vp(addr3_1,stop,1)
。
else if(input_pystr[0]>0x60)
{
output_init();
fenci();
sort_index();
find_parr();
ptr_change_show(addr3_1,addr3_2,addr3_3,addr3_4,p2,&p3,&p4,&p2len,&p3len,&p4len,p1_f,p1_b,&p1flen,&p1blen,&p1blen_0);
}
else if(input_pystr[0]==0) write_dgusii_vp(addr3_1,stop,1);
- 还是翻页操作,新的输入时候,翻页指针没有复位,导致新的翻页操作时候,传进去的指针值带入了上一次翻页后的值。需要对翻页指针进行复位。
这次调试,发现个大问题,就是变量的复位问题,总是不记得对变量复位,或者修改,影响后续流程。
还有,发现可以配合着硬件操作调试,就是打断点,然后硬件按键,然后程序往下走,获取按键值并作出反应,这样可以一步步走着看变量的变化,调试好像有点上道了。