花了几天,从没有思路到写完。因为是第一次写这种命令交互式的,所以bug会很多。
格式:E/e:指定要编辑的文件
Q/q:结束编辑
R/r(用r命令后继的k行正文代替原始正文中的m行到n行)
R k m n
k行正文
I/i(将i命令后继的k行正文插入到原始正文第m行之后)
I k m
k行正文
D/d(将原始正文中的第m行到第n行的正文内容删除)
D m n
这是我写的代码:
1 /* 实现简单的文本编辑器 */ 2 /* bug1:先按e,再按文件名,循环后ch还是等于' ' */ 3 /* bug2:插入函数中,要是正文的一行最后不是回车的话,则插入的第一行会在所插的那一行上面,没有分开 */ 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string.h> 7 8 #define CHMAX 80 /* 一行最多80个字符 */ 9 #define LINEMAX 200 /* 最多允许200行 */ 10 11 char command[] = "EeRrIiDdQq"; /* 可选择的命令 */ 12 char buffer[CHMAX]; /* 输入的缓冲区 */ 13 char *Line[LINEMAX]; /* 行指针,用来输入一行 */ 14 char *chpt; /* 获取命令及参数的字符指针 */ 15 char filename[256]; /* 输入的文件名 */ 16 int modified = 0; /* 修改标志 */ 17 int last; /* 文本的最后一行,没有内容 */ 18 void Edit(), Replace(), Insert(), Delete(), Quit(); 19 void (*comfunc[])() = {Edit, Replace, Insert, Delete, Quit}; /* 函数指针数组 */ 20 void call(); 21 22 int main(void) 23 { 24 call(); 25 return 0; 26 } 27 28 void call() 29 { 30 int j = 0; 31 char ch; 32 last = 0; 33 34 while (1) 35 { 36 j = 0; 37 printf("Input a command: [e,r,i,d,q] "); 38 39 /* bug1 */ 40 //ch = ' '; 41 //fflush(stdin); 42 while ((ch = fgetc(stdin)) != ' ') /* 输入命令 */ 43 { 44 buffer[j] = ch; 45 j++; 46 } 47 buffer[j] = '