程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 編輯器的改進

編輯器的改進

編輯:C語言基礎知識
  注:續網友 hua 之後,網友 Linuxhero 在討論區發布了他改進 hua 編寫的編輯器程序,並消除了文件存儲的亂碼問題,本站測試了這個程序,效果不錯,希望兩位網友再接再勵不斷地把這個編輯器完善起來,同時也謝謝兩位網友對非常空間的支持!
  
   -----------------------------------------------------------
  
   作者:linuxhero
  
   我的方法是對數組逐個附值,而不是采用串連接,消除了文件存儲亂碼的問題,同時還改進了刪除的功能,下面是修改後的源代碼:
  
   #include<unistd.h>
   #include<stdio.h>
   #include<curses.h>
  
   #define STARTX 1
   #define STARTY 1
  
   void initial()
   {
   initscr();
   cbreak();
   nonl();
   noecho();
   intrflush(stdscr,FALSE);
   keypad(stdscr,TRUE);
   refresh();
   }
  
   int main(int argc,char *argv[])
  
   {
   int x=STARTX;
   int y=STARTY;
   int ch,i,net[2000],sizefile=0;
   /* net[2000] 中的2000為文件最大行數 */
   char name[200000]; /* 設置文件最大容量 */
   FILE *fp;
  
   if(argc==1 argc>2) {
   printf("please input:./edit file exit:Esc ");
   }
  
   if(argc==2) {
   fp=fopen(argv[1],"w");
   initial();
  
   //box(stdscr,ACS_VLINE,ACS_HLINE);
   move(0,30);
   printw("edit:%s",argv[1]);
   refresh();
  
   move(x,y);
   do{
   ch=getch();
   switch(ch){
   case KEY_UP:
   if(y>1) --y;
   move(y,x);
   break;
  
   case KEY_DOWN:
   ++y;
   break;
  
   case KEY_RIGHT:
   ++x;
   break;
  
   case KEY_LEFT:
   if(x>1) --x;
   break;
  
   case ' ':
   ++y;
   x=1;
   move(y,x);
   insertln();
   break;
  
   case ' ':
   x+=4;
   break;
  
   case KEY_BACKSPACE:
   if(x>1) --x;
   move(y,x);
   /* 刪除的控制 */
   if (x>1) {
   delch();
   } else {
   addch(' ');
   }
   break;
  
   case KEY_DC:
   delch();
   break;
  
   case 27:
   fwrite(&name,sizeof(name),1,fp);
   endwin();
   /* 顯示數組存儲的內容 */
   printf("this is name:%s ",name);
   exit(0);
  
   default:
   insch(ch);
   /* 將輸入的字存入數組 */
   if (y==1) {
   name[x-1]=ch;
   name[x]='
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved