输入法调试bug记录

本文记录了输入法调试过程中遇到的问题及其解决办法,包括权重计算避免负数、索引库数据类型定义、搜索结果清除、指针传递与复位、翻页操作中的变量管理,以及输入字符判断等问题,提供了调试思路和方法。
摘要由CSDN通过智能技术生成
  1. 排序时候,
    排序的权重计算 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,这样就避免负数,两个权重平均每个字多少个拼音字母剩余拼音串都用上了。

  2. 索引库,用定义unsigned char cy1len,但是实际计算cy1len=399=0x18F,得到的cy1len=0x8F,与实际不符
    解决办法:用unsigned int cy1len定义,有时候要根据数据大小合理定义数据类型u8=255,u16=65535.

  3. 程序中用pbuff变量记录搜索得到的结果。我开始是在触控选择中对pbuff 进行清零操作,但是当连续输入拼音时候,每次都会重新分词并查词,于是pbuff一直在增加。
    修改办法:每次有新的输入,前面的结果要清除,所以进行分词查词时候,需要清零操作,pbuff=0呀

  4. 在一个函数中,用指针传递变量,当清零操作后,根据变量是否清零进行下一步操作,代码却写的{*pbuff=0} if(!pbuff){write}下一个判断没加*好变成传递指针的地址了,地址不会变,永远不为零,永远进不去这个write操作了,正确的应该是 if(!(*pbuff)) 什么时候传参,什么时候传指针,什么时候传二级指针:(1)当只是传递变量数值进函数,不需要修改时候,直接传参数就好了;(2)当要需要对变量进行修改,就需要传指针,将变量地址传进去,修改地址里的值;(3)当只需要将指针地址传进去,不需要修改指针地址,也仅仅用传指针就行;(4)当需要修改指针的值,即修改指针指向的地址,这个时候就需要传二级指针,将指针本身地址传进去,修改这个地址指向的地址,就修改指针的值了。(5)另外,数组名是个常量指针,其值不能修改,也就是它指向的地址一致不会变,需要用到时候,则需要重新定义一个指针,将数组名的值赋给新指针,修改这个新指针就可以实现了。

  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变量在每次有新的输入时候,都得清零一次,不然一次输入翻页过,下次输入进来,这个变量值还在。会导致翻页出错。

  6. 输入数字、标点等时候,pylen这个变量没赋值,。导致choosecy函数中if(!(*pylen))这个条件总是成立,本来不该进去的流程进去了。既然会影响后续流程,那么pylen应该主动改变

  7. 删除或者消除拼音,空拼音字符进入分词流程后,导致后续有新的输入,不出分词结果,屏上是空的.
    

这个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);
  1. 还是翻页操作,新的输入时候,翻页指针没有复位,导致新的翻页操作时候,传进去的指针值带入了上一次翻页后的值。需要对翻页指针进行复位。

这次调试,发现个大问题,就是变量的复位问题,总是不记得对变量复位,或者修改,影响后续流程。

还有,发现可以配合着硬件操作调试,就是打断点,然后硬件按键,然后程序往下走,获取按键值并作出反应,这样可以一步步走着看变量的变化,调试好像有点上道了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows 11 输入法Bug是指在操作系统中使用输入法工具时出现的问题和错误。以下是我对此问题的回答。 Windows 11作为微软最新发布的操作系统版本,尽管带来了许多新功能和改进,但也不可避免地出现了一些输入法Bug。这些Bug可能会导致输入法无响应、输入延迟、输入不准确等问题。 其中一个常见的问题是输入法无响应。有时候,当我们点击或选择输入法工具时,它可能会无法弹出或没有任何反应。这可能是由于系统冲突或输入法工具本身的问题导致,可以尝试重新启动计算机或重新安装输入法工具来解决。 另一个常见的问题是输入延迟。在某些情况下,当我们输入文字时,会出现明显的延迟现象,导致输入速度变慢。这可能是由于计算机性能低下或输入法设置不当引起的。可以尝试关闭其他占用计算机资源较多的程序,或调整输入法设置来提高输入响应速度。 还有一个常见的问题是输入不准确。有时候,我们输入的内容可能与我们实际所要表达的不一致,出现错别字或词语推测错误的情况。这可能是由于输入法工具中词库或自动纠错算法的问题所致。可以尝试更新输入法工具或手动调整输入法设置来改善准确性。 需要注意的是,这些Bug并非所有用户都会遇到,而且在不同的电脑配置和软件环境下可能表现不同。作为用户,我们可以及时向微软公司报告这些问题,以帮助他们改进和修复输入法Bug,同时也可以关注微软的官方更新和补丁,及时升级操作系统以获取更好的输入法体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值