荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: lvyou (≈航之心≈), 信区: InstallBBS
标  题: 菜单功能的实现
发信站: 荔园晨风BBS站 (Tue Dec 11 20:15:04 2001), 转信

发信人: zhch (zhch), 信区: BBSDev
标  题: input函数的实现
发信站: 南京大学小百合站 (Tue Sep 11 09:13:53 2001), 站内信件

input()函数基本功能

新系统采用input()做为基本输入函数。
input()函数的格式为:
int input(char *prompt, char *default_val, char *buf, int maxlen, int
mode);

prompt为输入提示字符串
defaut_val是输入缺省值
buf是输入结果
maxlen是输入结果的最大长度+1
mode是输入方式,其中
        mode=0: 无回显输入模式
        mode=1: 正常输入模式
        mode=2: 密码输入模式(回显'*')
        mode=3: 可提前退出的输入模式(遇到Tab, KEY_UP, KEY_DOWN提前退出
,并返
回,与
                调用部分代码相结合,可实现一些特殊功能)

使用举例:

input("请输入帐号: ", "", id, 13, 1);
input("请输入密码: ", "", pw, 13, 2);

函数基本算法:

函数中主要变量结构,除入口参数外:
pos: 新光标在buf中的位置
old_pos: 旧光标在buf中的位置
len: 已输入部分的长度
c: 键盘输入字符
x,y: 屏幕光标位置

流程:
1,     清屏至行尾。
2,     设置pos, 获取x,y坐标,打印prompt, 根据mode打印default_val
3,     将default_val赋值给buf(之所以不直接用buf的输入值做为缺省值是因
为那样
每次使用前要给
        buf清零,比较麻烦)
4,     循环处理按键c:
        4.1 如果输入为'\n', flush()并函数返回。
        4.2 如果输入为tab, key_up, key_down且mode为3,函数返回
        4.3 如果是KEY_LEFT, 并且pos>0, 则pos减1
        4.4 如果是KEY_RIGHT, 并且pos不在输入串的末尾,pos加1
        4.5 如果是backspace键,并且pos>0, 则pos-1, 然后buf自pos起前移1字
符,
        4.6 把变化的部分根据mode print出来,
        4.7 如果是del键,类似backspace键处理,但pos不减1
        4.8 如果是32到254之间的字符,且len<maxlen, 将c加入当前位置,pos
加1, 并
打印变动部分
        4.9 最后将光标移到正确位置

此外,backspace和del处还应加入对中文的判断.

--

zhch.bbs@bbs.nju.edu.cn

※ 来源:.南京大学小百合站 bbs.nju.edu.cn.[FROM: dsl.nju.edu.cn]

--

                                                     ^^
                               ,+ '`^`''+,
                             .'           '.
                            /               \
^^-_-^^-_-^^-_-^^-_-^^-_-^^-_-^^^^-_-^^-_-^^-_-^^-_-^^-_-^^-_-^^^^-_-^^-_- ^^-?

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.55.60]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店