本人现在是学C的初学者~所以没什么经验可说~很菜~今天试写一个图形界面密码输入的程序~可是怎也写不出只要的那部份~!有什么高手可以帮我指点下呢?有很多地方不会写了~请高手们帮帮我了~源程序如下:
在winTC1.9.1下完传可以编译~可是程序运行就是错误太多~
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include "graphics.h"
#define ENTER 13 /* 0X1C0D */
#define ESC 27 /* 0X011B */
#define BACK 8 /* 0x0e08 */
#define TIMER 0x1c /* 时钟中断的中断号 */
int Counter; /* 计数变量 */
void interrupt (*oldhandler)(void);
void interrupt newhandler(void)
{
Counter++;
oldhandler();
}
void SetTimer(void interrupt (*IntProc)(void))
{
oldhandler=getvect(TIMER);
disable();
setvect(TIMER,IntProc);
enable();
}
void KillTimer(void)
{
disable();
setvect(TIMER,oldhandler);
enable();
}
void initgr(void) /* BGI初始化 */
{int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd,&gm,"");
}
void input(int x,int y,unsigned char colour) {
int key,time=1;
int i,m;
char password[12+1];
char ch,str[2]=" ";
SetTimer(newhandler); /* 修改时钟中断 */
for(;;) {
i=0;
if(bioskey(1))
{
key=bioskey(0);
ch=key&0x00ff;
if ( (password[i] = ch)==13){password[i] = '\0';break;}
else if (ch==ESC)/* 按escape键提前退出程序 */
{ break;
}
else if(ch==ENTER){
password[i] = '\0';break;}
/*if ( (password[i] = getch()) == 13 )*/
else if(ch==BACK){
if (i>0)
x-=2;
i--;
setcolor(2);
rectangle(x,y+16,x+6,y+17);
}
else{
password[i]=str[0]=ch;
outtextxy(x,y+6,str);
x+=8;
}
}
if (Counter>1) /* 1秒钟处理一次 */
{
/* 恢复计时变量 */
Counter=0;
time++;
time%=2;
/*if(time==1)*/
if(time) { setcolor(BLACK);
rectangle(x,y+16,x+6,y+17);
/* time=0;*/
}
else{ setcolor(colour);
rectangle(x,y+16,x+6,y+17);
/* time=1;*/
}
}
}
KillTimer(); /* 恢复时钟中断 */
}
void main(void)
{
initgr();
input(20,30,2);
closegraph();
}