当前位置: 代码迷 >> C语言 >> KNOCKER进来
  详细解决方案

KNOCKER进来

热度:364   发布时间:2004-09-01 05:45:00.0
KNOCKER进来

他妈的KNOCKER。竟然将我的军,干嘛非得要今天晚上写出来。害得我累得趴在电脑前面睡着了。一觉起来竟然是5点了。赶紧爬起来写完了剩下的部分。

因为时间太紧了,根本没有时间来理顺思路,简直就是想到什么写什么。所以程序中有不妥当的地方请你多多多多指正。

#include <stdio.h> #include <dos.h> /*按键定义*/ #define RIGHT 0x4d00 #define LEFT 0x4b00 #define UP 0x4800 #define DOWN 0x5000 #define ESC 0x001b

static char texts[400][80]; /*文本记录。列、行*/

int presskey() /*有暂停按键判断函数*/ { unsigned key; key=bioskey(0); if(key<<8) key=key&0x00ff; return key; }

main() {

int i,line,x,y; unsigned key; FILE *fp; char fname[30];

textmode(2); /*定义显示模式*/ printf("\nPlease input FileName:"); scanf("%s",fname);

x=0;y=0;line=0; if((fp=fopen(fname,"r"))==NULL) exit(1); /*从文件中读取文本到texts*/ while((texts[y][x++]=fgetc(fp))!=EOF) { if(x==80) {x=0;y++;} if(texts[y][x-1]=='\n') { texts[y][x]=0; x=0;y++; } }

fclose(fp);

while((key=presskey())!=ESC) /*按键判断*/ { switch(key) { case UP : line--;break; case DOWN : line++;break; }

if(line<0) line=0; else if(line>y-24) line=y-24; else { clrscr(); for(i=line;i<line+24;i++) printf("%s",texts[i]); /*输出字符*/ }

}

}

好了,你看完我的程序了,把你的链表交出来吧,我想看看~~~

搜索更多相关的解决方案: KNOCKER  

----------------解决方案--------------------------------------------------------
我头好晕,想睡觉。.......
----------------解决方案--------------------------------------------------------
你小子不睡觉?白天不上课啊?
----------------解决方案--------------------------------------------------------

我靠,knocker还好说,还不是为你那代码!你们什么时候又较上劲了?
----------------解决方案--------------------------------------------------------
晕啊,昨天我和神聊完就2点了,我下线就睡了,谁知道他.............
----------------解决方案--------------------------------------------------------

你们的厉害……我每天最晚10点半睡觉……

哎……怎么发现大家都开始变性了。

神也变成了毒女人……


----------------解决方案--------------------------------------------------------
以下是引用乌鸦丘比特在2004-09-01 19:27:49的发言:

你们的厉害……我每天最晚10点半睡觉……

哎……怎么发现大家都开始变性了。

神也变成了毒女人……

不好意思,我用这头像不是为了变性的,是左边那个女孩像我的某某,所以就用了。

knocker,神要上课的呀,不要逗他聊到深夜,虽然我也试过……


----------------解决方案--------------------------------------------------------
......
----------------解决方案--------------------------------------------------------

感谢大家对小弟的关心。现在才刚刚开学,很轻松的啦,昨天晚上我们还和四个舍友去女生宿舍门口数美女。

今天晚上舍友们又都出去开party了,就我一个没GF留在宿舍看门,正好有时间来整理下KNOCKER和我讨论的思路,个人觉得KNOCKER说得对,实现滚屏的确还是链表好操作一些。因为链表的特长就是很轻松的就可以实现插入和删除查找等等功能。所以我打算利用这段时间重新写过一个用链表来实现滚屏的程序。

界面我采用了80x25黑白显示(BW80)文本显示模式; 链表系统是用比较好操作的双向链表,每个链保存一行文字的信息。

这个程序的稳定性要比前一个大很多了,而且能支持较大的文本文件的显示,但是目前还没有左右滚屏的功能,所以一行显示的内容最好不超过80个字符,否则会折行显示。

如果大家想知道滚屏具体是如何实现的,就请发帖去问KNOCKER,他比我有空。


----------------解决方案--------------------------------------------------------

#include <stdio.h> #include <dos.h> #include <conio.h>

#define RIGHT 0x4d00 #define ENTER 0x000d #define LEFT 0x4b00 #define UP 0x4800 #define DOWN 0x5000 #define ESC 0x001b

int presskey() /*有暂停按键*/ { unsigned key; key=bioskey(0); if( key<<8 ) key=key&0x00ff; return key; }

struct lines { char *linetext; struct lines *prior; struct lines *next; }linex;

struct lines *start; struct lines *last;

void loadfile(char *fname); void show();

main() { char fname[30];

textmode(2); printf("\nPlese input FileName:"); scanf("%s",fname);

loadfile(fname); show(); getch(); }

void loadfile(char *fname) { char testtext[80]; struct lines *info,*i; FILE *fp;

if( (fp=fopen(fname,"r"))==NULL ) exit(1);

start=(struct lines *)malloc(sizeof(struct lines)); last =(struct lines *)malloc(sizeof(struct lines)); start->prior=NULL; start->next=last; last->next=NULL; last->prior=start; i=start;

for(;;) { info=(struct lines*)malloc(sizeof(struct lines)); if( fgets(testtext,80,fp)==NULL ) break; info->linetext=(char *)malloc(strlen(testtext)+1); strcpy(info->linetext,testtext);

info->next=i->next; i->next=info;

info->next->prior=info; info->prior=i; i=info; } fclose(fp); }

void show() { struct lines *beginline,*endline,*info; int i; unsigned key;

clrscr(); info=start->next; beginline=info; for(i=0;i<24;i++) { if(info->next==NULL) break; printf("%s",info->linetext); info=info->next; } endline=info->prior;

while( (key=presskey())!=ESC ) { switch(key) { case UP : { if( beginline->prior->prior==NULL ) break; _AH=7;_AL=1;_CH=0;_CL=0;_DH=24;_DL=79;_BH=143; geninterrupt(0x10); gotoxy(1,1); cprintf("%s",beginline->prior->linetext); beginline=beginline->prior; endline=endline->prior; break; }

case DOWN: { if( endline->next->next==NULL ) break; _AH=6;_AL=1;_CH=0;_CL=0;_DH=24;_DL=79;_BH=143; geninterrupt(0x10); gotoxy(1,24); cprintf("%s",endline->next->linetext); endline=endline->next; beginline=beginline->next; break; } } } }


----------------解决方案--------------------------------------------------------