易码技术论坛

 找回密码
 加入易码
搜索
查看: 1571|回复: 10

[求助] lava1.0中字符串输入的问题

[复制链接]
发表于 2008-1-11 21:30:26 | 显示全部楼层 |阅读模式
输入字符串使用gets,但是会清屏,且无法控制显示为小字,还没办法输入中文

请问有什么简单的方法实现以下功能?
1.可输入一连串字符到某一字符串数组
2.中文,英文,数字混编
3.输入时可自由修改,按输入键结束输入
4.可以控制屏幕的显示

貌似必须写一个很复杂的函数啊!
发表于 2008-1-11 23:06:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-1-12 14:41:19 | 显示全部楼层
这么长的代码怎么就没点注释啥的?
怎么看啊?
代码规范......
发表于 2008-1-12 17:06:39 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2008-1-12 20:25:34 | 显示全部楼层
感谢,回头我试试
发表于 2008-1-13 09:15:24 | 显示全部楼层
烤鸡翅,好吃!
我对汉字输入那个函数不太理解哦!(Lava1.0的)
发表于 2008-1-13 11:43:58 | 显示全部楼层

下面TC800支持汉字输入

楼上兄弟用的是6502机器里所带的输入法,故无法显业小字,下面的是LAVA2TC800的输入函数

long input(long xx){
char k,ts[26],i,ch,bh,pinyin[10],s[20];
long tmp,nowp,end,t;
int cian,a,b,l,id,sum,ii;
memset(ts,0,26);


cian=0;
ClearScreen();nowp=ts;
while(1){
AAA:
ClearScreen();
if(cian==0){memset(pinyin,0,6);ii=0;memset(s,0,20);TextOut(1,68,"a",2);}
if(cian==1)TextOut(1,68,"A",2);
if(cian==2)TextOut(1,68,"拼",2);
TextOut(1,1,xx,1);
TextOut(1,13,ts,1);
a=(nowp-ts)*6+1;
end=ts+strlen(ts);
Block(a,13,a+1,26,1);
if(cian==2){
   TextOut(18,68,pinyin,1);
        t=System.PY2GB(id,pinyin,s);
        if (t!=-1){sum=t>>16;TextOut(52,68,s,1);}
        else {memset(s,0,20);TextOut(18,68,pinyin,1);}
}

Refresh();

k=getchar();

if(k==27)return '0';
if(k==13){if(strlen(ts)==0)return '0';else return ts;}
if(k==29){
if(nowp<=ts)continue;
if(*(nowp-1)>160){memmove(nowp,nowp-2,end-nowp);
nowp=nowp-2;memset(end-2,0,2);end=end-2;
}
else {
memmove(nowp-1,nowp,end-nowp);
nowp--;*(end-1)=0;end--;
}
continue;
}//29结束
if(k==26){cian=cian+1;if(cian>2)cian=0; goto AAA;}//26
if(k==23){

if(cian==2&&pinyin[0]!=0){
{ii=ii-1;pinyin[ii]=0;if(ii<1)ii=0;continue;}
}
  if(nowp<=ts){nowp=ts;continue;}
if(*(nowp-1)>160)nowp=nowp-2;else nowp--;continue;
}//23
if(k==22){if(nowp>=end){nowp=end;continue;}
memset(pinyin,0,6);
if(*(nowp)>160)nowp=nowp+2;else nowp++;continue;
}//22

if(!cian){//小写
if(isprint(k)){
if(26-strlen(ts)<1)goto AAA; //插入字符
memmove(nowp+1,nowp,end-nowp);
end++;*nowp=k;nowp++;
  }
}//cian==0结束
if(cian==1){
if(isprint(k)){
if(26-strlen(ts)<1)goto AAA;
memmove(nowp+1,nowp,end-nowp);
end++;*nowp=toupper(k);nowp++;
}
}//cian==1结束

if(cian==2){
l=0;ch=bh=0;


    if (k>='a' && k<='z') {
            if (ii<6) { //i为拼音的长度
                pinyin[ii++]=k;
                pinyin[ii]=0;
                id=sum=0;
            }//if
    }//if结束
    if(k==21){if (id+9<sum) id=id+9;}   
    if(k==20){if (id>9) id=id-9;else id=0;}
   
    if(k==25){l=0;if(s[0]==0)goto AAA;
    for(;;){
   
    if(bh==23){if(l<=0)l=0;else l=l-1;}
    if(bh==22){if(l>=8)l=8;else l=l+1;}
    if(bh==13){
    if(26-strlen(ts)<2)goto AAA;
    if(s[0]==0)goto AAA;
    memmove(nowp+2,nowp,end-nowp);
    memmove(nowp,s+l*2,2);
    nowp=nowp+2;end=end+2;
    memset(pinyin,0,6);ii=0;
    memset(s,0,20);
    goto AAA;
   
    }//bh13
  
   ClearScreen();
    TextOut(1,1,xx,1);
    TextOut(1,13,ts,1);
    TextOut(1,68,"拼",2);
    TextOut(18,68,pinyin,1);
    TextOut(52,68,s,1);
    Block(l*12+52,66,l*12+12+52,78,2);
   Refresh();bh=getchar();   
   } }//for结束
      
      
     
   
}





}//while结束
}//input结束
void main(){
long x;
x=input("请输入字符串:");
if(x=='0')printf("NO");
else printf("%s",x);
getchar();
}

[ 本帖最后由 xintu1987 于 2008-1-13 11:48 编辑 ]
发表于 2008-1-13 11:45:51 | 显示全部楼层

星端因为没有定义PY2GB函数

所以要在PC端编译
发表于 2008-1-13 11:51:01 | 显示全部楼层

下面是我以前做的6502的输入函数,但没经过优化

input(long x)
{
int c;
long l;
char ts[60],zj[60],han[3];
memmove(ts,zj,60);
SetScreen(0);
printf(x);
c=GetWord(2);
for (;;) {
if(c==13)return ts;
if(c==29){
if((ts[l-1]&0xff00)==0&&isprint(ts[l-1])){
   l=l-1;if(l<=0)l=0;
   ts[l]=0;
}
else {
   l=l-2;if(l<=0)l=0;
   ts[l]=0;ts[l+1]=0;
   }
}
if ((c&0xff00)==0 && isprint(c)){
han[0]=c;han[1]=0;strcat(ts,han);
SetScreen(0);
printf(x);
printf("\n%s_",ts);c=0;l++;
continue;
}
else if (c<0) {
memset(_TEXT+4*20,' ',20); file://清除提示行
han[0]=c;
han[1]=c>>8;
han[2]=0;
strcat(ts,han);
l=l+2;
}
SetScreen(0);
printf(x);
printf("\n%s_",ts);

c=GetWord(3);

}
}

void main(){
long i;
i=input("请输入:");
SetScreen(1);
printf(i);getchar();

}
发表于 2008-1-13 11:52:10 | 显示全部楼层

因PC端去除了GetWord()函数

所以要用星端YAN的编译器才能通过~
发表于 2008-1-15 16:26:21 | 显示全部楼层
输入函数好多源代码都有,可以搜搜。
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-19 14:31 , Processed in 0.011092 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表