简单行编辑程序
第3章UNIX文本编辑程序

删除当前行的命令 dd 命令3dd删除从当前行开始的3行
删除块
删除到配对括号命令:将光标定位在括号上 d%
复制到剪贴板yank(不删除,只拷贝到剪贴板)
yy与y% paste取出剪贴板中内容 p
第3章 第13页
字符替换
替换光标处字符 r
ra命令将当前光标处字符替换为a 将当前光标处开始的三个字符依次替换为abc,则
需要按命令rarbrc
替换若干字符 R
例:命令Rabcdef,然后按Esc键 该命令把从当前光标开始的字符依次替换为abcdef,
用Esc来结束多字符替换命令
第3章 第14页
取消和重复
取消上一次的编辑操作(undo) u
如:误删了一段正文,用u命令可撤销删除 如:把文件中的所有abc字符串替换成xyz字符串,
用u命令可撤销替换
重复上一次的编辑操作 .
按圆点键,可以重复上一次的编辑操作 例如:按3dd命令删除了三行,然后按圆点键就再
删除三行,接着连续按圆点键,每按一次删三行
第3章 第15页
文件操作命令
存盘退出
ZZ :wq<CR>
存盘不退出
:w<CR>
不存盘退出
:q!<CR>
读入文件xyz.c插入到当前行之下
例
[a-zA-Z_][a-zA-Z0-9_]*->number \([a-zA-Z_][a-zA-Z0-9_]*\)->number
替换字符串中的 \0 \1 \2 ……
第3章 第23页
更灵活的替换(2)
将“变量名->number”替换为“变量名->num”
:1,$s/\([a-zA-Z_][a-zA-Z0-9_]*\)->number/\1->num/g
文本编辑器的程序设计及代码示例

文本编辑器的程序设计及代码示例在计算机科学领域,文本编辑器是一种用于编辑文本文件的应用程序。
它允许用户创建、修改和保存文本文件,并提供了一系列功能来方便用户进行编辑操作。
本文将介绍文本编辑器的程序设计原理,以及示范几个常见的代码示例。
一、程序设计原理文本编辑器的程序设计需要考虑以下几个方面:1. 用户界面设计:一个好的文本编辑器应具备直观友好的用户界面,提供各种操作选项和快捷键,使用户能够轻松地进行文本编辑。
2. 文本处理功能:文本编辑器应具备基本的文本处理功能,如插入和删除文本、查找和替换、拷贝和粘贴等。
这些功能需要通过合适的数据结构和算法来实现。
3. 文本格式化:文本编辑器应支持对文本进行格式化操作,如自动对齐、缩进、换行等。
4. 多标签支持:多标签功能允许用户同时打开多个文本文件,并在它们之间切换。
这要求程序设计中能够有效地管理多个文本文件的打开、关闭和切换。
二、代码示例下面是几个简单的代码示例,用于展示文本编辑器的一些基本功能。
1. 创建文本文件```pythondef create_file(filename):# 创建一个新的文本文件file = open(filename, "w")file.close()```2. 打开文本文件```pythondef open_file(filename):# 打开文本文件并返回文件对象 file = open(filename, "r")return file```3. 插入文本```pythondef insert_text(file, position, text): # 在指定位置插入文本file.seek(position)content = file.read()file.seek(position)file.write(text + content)```4. 删除文本```pythondef delete_text(file, start, end):# 删除指定位置的文本file.seek(start)content = file.read()file.seek(start)file.write(content[:end - start])```5. 查找和替换文本```pythondef find_replace(file, old_text, new_text):# 在文本中查找指定内容并替换file.seek(0)content = file.read()new_content = content.replace(old_text, new_text)file.seek(0)file.write(new_content)```6. 关闭文本文件```pythondef close_file(file):# 关闭文本文件file.close()```三、总结通过以上代码示例,我们展示了文本编辑器的一些基本功能,包括创建文件、打开文件、插入和删除文本、查找和替换文本以及关闭文件。
SublimeText编辑器使用秘籍

SublimeText编辑器使用秘籍第一章:SublimeText简介SublimeText是一款功能强大、灵活性高的文本编辑器,被广泛用于程序开发和编程。
它提供了许多有用的功能和快捷键,使得编码工作更加高效和愉快。
本章将介绍SublimeText的基本特点和安装方法。
SublimeText的独特之处在于它的多行编辑功能,可以同时编辑多个光标位置的文本。
这对于批量重命名、代码块插入等操作非常有用。
SublimeText还支持多种编程语言和文件格式,并且可以通过插件增加更多功能。
安装SublimeText十分简单。
只需要访问官方网站,下载适合您的操作系统版本,然后按照安装向导进行操作即可。
安装完成后,打开SublimeText就可以开始使用了。
第二章:常用功能和快捷键SublimeText提供了许多常用功能和快捷键,以便开发者更加高效地编码。
本章将介绍一些常用的功能和相应的快捷键。
1. 查找和替换:您可以使用Ctrl + F(在当前文件中查找)或者Ctrl + H(在当前文件中查找和替换)快捷键打开查找和替换窗口。
您还可以使用Ctrl + Shift + F在整个项目中查找。
2. 多行编辑:按住Ctrl(Windows)或Cmd(Mac)键,点击光标进入您要编辑的位置,然后开始编辑即可。
您还可以使用Ctrl + D选择下一个相同的单词进行多行编辑。
3. 代码折叠:您可以使用Ctrl + Shift + [折叠代码块,Ctrl + Shift + ]展开代码块。
4. 自动完成:SublimeText可以自动补全代码,提高编码速度。
按下Tab键可以进行代码片段补全,按下Ctrl + Space进行词汇补全。
5. 代码片段:您可以使用自定义的代码片段来快速插入重复的代码,提高开发效率。
代码片段必须保存在SublimeText的User 目录下的Snippets文件夹中。
第三章:插件的安装和使用SublimeText的插件是其强大的功能之一。
行编辑程序

// 《数据结构》//第一组:行编辑程序(+注释)#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#include<conio.h>#define STACK_MAX_SIZE 100 //初始化分配空间最大值#define STACKINCREMENT 10 //空间增量struct SqStack{char *base;char *top;int stacksize;}; //定义结构体,头尾指针void Initstack(SqStack &S) //建立栈{S.base=(char*)malloc(STACK_MAX_SIZE *sizeof(char)); //分配空间,每个元素为一个存储单元if(!S.base) exit(1); //存储分配失败S.top=S.base; //初始化,头尾指针指向同一位置S.stacksize=STACK_MAX_SIZE; //栈的容量为100}void push(SqStack &S,char e) //插入元素e为栈顶元素{if(S.top-S.base>=S.stacksize) //判断是否满栈{S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char)); //追加栈的容量10if(!S.base) exit(1); //存储分配失败S.top=S.base+S.stacksize; //头指针指向栈顶元素的上一个位置S.stacksize+=STACKINCREMENT; //此时栈的长度为110}*S.top++=e;}char pop(SqStack &S,char e) //若栈不空,则删除S的栈顶元素,用e返回其值{if(S.top==S.base) //return false;e=*--S.top; // 等价于e=*(S.top-1); --S.top; e=*S.top;return e;}void clearstack(SqStack &S) //清空栈{S.top=S.base;}void destorystack(SqStack &S) //销毁栈{free(S.base); //释放空间S.top=S.base;}bool stackempty(SqStack &S) //查看栈是否为空,如果空,返回true,否则返回fasle {if(S.top==S.base)return true;return false;}void printstack(SqStack &S) //打印栈内元素{char e;while(!stackempty(S)) //判断循环{pop(S,e); //压栈,e为栈顶元素printf("%d",e); //输出e}}void main() //主函数{char ch,e;SqStack S,D; //定义两个栈S和Dprintf("请输入字符:\n");Initstack(S); //构造栈SInitstack(D); //构造栈Dch=getchar();while(ch!=EOF) //如果ch不是终止字符{while(ch!=EOF&&ch!='\n') //ch不是终止字符,且不是'\n'{switch(ch) //循环{case'#':pop(S,e); break; //遇#,删除栈顶元素case'@':clearstack(S); break; //遇@,清空栈Sdefault:push(S,ch); break; //否则,插入字符ch}ch=getchar(); //输入字符}while(!stackempty(S)) //如果栈S非空,循环{e=pop(S,e);push(D,e);}while(!stackempty(D)) //如果栈D非空,循环{e=pop(D,e);printf("%c",e);}clearstack(S);if(ch!=EOF)ch=getchar();}destorystack(S); //销毁栈S}/*遇到问题:1、头指针和尾指针的指向问题2、初始化空间容量问题,追加空间增量3、Switch分支语句判断问题*/。
简单的行编辑器

计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:简单的行编辑器姓名:学号:专业班级:软件工程软件102 系(院):计算机工程学院设计时间:设计地点:软件工程实验室、教室<2>用户可从键盘上输入字符,以*结尾表示输入字符结束,界面上会输出用户输入的字符,以及行编辑的功能选择项。
(如输入如下字符beijing huan ying ni *)<3>输入选择1,则依次输出:字母个数:17数字个数:0空格个数:4字符总数:21是否继续使用(Y/N):<4.1>选择Y,则出现行编辑器的功能选择,<4.2>如果第三步结束选择N,则输出**********谢谢使用**********<,再次需要进行行编辑器功能选择:输入选择2;则输出“请输入要统计的某一字符”提示用户输入要查找的字符假如输入i;则输出:i在文章中出现次数为:4;是否继续使用(Y/N)<**********谢谢使用**********<则输出行编辑器的功能选择项目;选择3;输出“请输入要删除子串的起始位置和长度:”提示用户输入,如果输入0 7输出“删除某一子串后:”huan ying ni**********谢谢使用**********<5>其他字符测试;例如用户输入:beijing BEIJING 520*输出字母个数:14数字个数:3空格个数:2字符总数:19统计字符i出现次数为2;删除从8号位器长度为7的字串后输出字符为beijing 520五用户手册1.运行程序,首先出现主界面。
主界面首行显示“欢迎使用文本编辑器”,输出提示信息“请输入要编辑的字符”,然后界面显示用户输入的字符。
然后主界面文本编辑器的功能菜单,功能菜单包括三个选项:选项一:统计字数,选择该项可进字数统计,当用户输入字符结束后,选择功能选项一,主界面回自动统计各字符数,然后输出。
2;选项二:统计出现次数,选择该项可进行对文章中某一字符出现字数的统计,当用户选择功能二时,主界面回输出提示信息,提示用户输入要统计的字符,用户可从键盘任意输入字符,以回车键结束。
数据结构第三章 栈和队列part2)

多个函数嵌套调用的规则是:
后调用先返回 !
此时的内存管理实行“栈式管理”
例如:
void main( ){ void a( ){
…
…
a( );
b( );
…
…
}//main
}// a
void b( ){
… 函数b的数据区 函数a的数据区 Main的数据区
}// b
递归函数执行的过程可视为同一 函数进行嵌套调用.
例七、实现递归
当在一个函数的运行期间调用另一个函 数时,在运行该被调用函数之前, 需先完成三项任务:
• 将所有的实在参数、返回地址等信息传 递给被调用函数保存;
• 为被调用函数的局部变量分配存储区; • 将控制转移到被调用函数的入口。
从被调用函数返回调用函数之前,应该 完成下列三项任务:
• 保存被调函数的计算结果; • 释放被调函数的数据区; • 依照被调函数保存的返回地址将控
从原表达式求得后缀式的规律为:
1) 设立操作数栈; 2) 设表达式的结束符为“#”,
预设运算符栈的栈底为“#”;
3) 若当前字符是操作数, 则直接发送给后缀式。
从原表达式求得后缀式的规律为:
4) 若当前运算符的优先数高于栈顶运算 符,则进栈;
5) 否则,退出栈顶运算符发送给后缀式;
6) “(” 对它之前后的运算符起隔离作 用,“)”可视为自相应左括弧开始的 表达式的结束符。
// 从终端接收下一个字符
}
将从栈底到栈顶的字符传送至调用过程的数据区;
ClearStack(S);
// 重置S为空栈
if (ch != EOF) ch = getchar();
}
简述运行java程序的步骤和方法

简述运行java程序的步骤和方法运行Java程序的步骤和方法Java是一种跨平台的编程语言,可以在不同的操作系统上运行。
为了运行Java程序,需要经过以下步骤:1. 安装Java开发工具包(JDK)Java开发工具包是Java程序开发的必备工具。
在安装JDK之前,需要先确认操作系统的位数(32位或64位),然后下载对应版本的JDK安装文件。
安装JDK时,需要按照安装向导的步骤进行操作,通常只需要选择默认选项即可完成安装。
2. 编写Java程序使用任何文本编辑器编写Java程序,保存为.java文件。
Java程序通常以public class开头,包含一个main方法,是程序的入口点。
Java的语法相对简单,但需要遵循一定的规范和约定。
3. 编译Java程序在命令行中进入Java程序所在的目录,使用javac命令编译Java 程序。
例如,输入javac HelloWorld.java即可编译名为HelloWorld.java的Java程序。
编译成功后,会生成一个.class文件,其中包含了Java程序的字节码。
4. 运行Java程序在命令行中输入java命令,加上类名(不包含.java扩展名),即可运行Java程序。
例如,输入java HelloWorld即可运行名为HelloWorld的Java程序。
程序运行过程中,可以在控制台输出信息,也可以接受用户的输入。
5. 调试Java程序如果Java程序出现了错误,可以使用调试工具进行调试。
调试工具可以帮助开发者找出程序运行时的错误,并提供一些调试信息。
常用的Java调试工具包括Eclipse、IntelliJ IDEA、NetBeans等。
除了以上步骤,还有一些Java程序开发的基本技巧和注意事项:1. 使用面向对象的编程思想Java是一种面向对象的编程语言,可以使用类、对象、继承、封装等面向对象的特性来开发程序。
面向对象的编程思想可以使程序结构更加清晰,易于维护和扩展。
学习如何在程序编辑器中进行代码片段的删除和编辑

学习如何在程序编辑器中进行代码片段的删除和编辑在进行软件开发和编程时,我们常常需要在程序编辑器中进行代码片段的删除和编辑。
代码片段的删除和编辑是程序员日常工作中非常基础和常见的操作,掌握删除和编辑代码片段的技巧能提高我们的开发效率,减少出错的可能性。
下面将介绍一些常用的方法和技巧供大家学习和参考。
1. 删除代码片段在程序编辑器中删除代码片段可以使用以下方法:(1)按键删除:在编辑器中选中要删除的代码片段后,按下“Delete” 或“Backspace” 键即可快速删除选中的代码。
(2)剪切操作:在编辑器中选中要删除的代码片段后,按下快捷键“Ctrl + X” 或者右键点击选中的代码片段选择“剪切”功能即可删除选中的代码。
(3)删除行:如果要删除整行代码,可以将光标放在要删除的代码行上,按下“Ctrl + D”快捷键,编辑器将会删除当前所在行的代码。
(4)多行删除:如果要删除多行代码,可以按住“Shift”键,同时用鼠标选中多行代码,然后进行删除操作,选中的多行代码都会被删除。
2. 编辑代码片段在程序编辑器中编辑代码片段可以使用以下方法:(1)插入文本:将光标放在想要插入文本的位置上,直接开始键入新的代码即可。
编辑器会自动将新的代码插入到光标所在位置,并移动光标到下一行或者新的代码所在位置。
(2)替换文本:在编辑器中选中要替换的文本后,键入新的代码即可。
选中的文本将会被替换成新的代码。
(3)复制粘贴:选中要复制的代码后,可以按下快捷键“Ctrl + C”进行复制,然后将光标移动到需要粘贴的位置,按下快捷键“Ctrl + V”进行粘贴操作。
(4)撤销和重做:在编辑器中,通过快捷键“Ctrl + Z” 可以撤销上一步操作,通过快捷键“Ctrl + Y” 可以重做撤销的操作,这也是一种快速恢复代码片段的方法。
3. 快捷键和代码补全许多程序编辑器都提供了快捷键和代码补全功能来加快代码片段的删除和编辑。
这些功能可以大大提高我们的开发效率,减少输入错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构程序设计实验报告简单行编辑程序院系:计算机科学与技术学院专业:软件工程1班姓名:丁珊珊学号:E01214269日期:2014/9/19一、需求分析1、问题描述:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。
限制这些操作以行为单位进行的编辑程序称为行编辑程序。
被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。
一种解决方法是逐段的编辑。
任何时刻只把待编辑文件的一段放在内存,称为活区。
试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。
2、此程序具备以下功能:(1)行插入。
格式:i<行号><回车><文本>. <回车>将<文本>插入活区中第<行号>行之后。
(2)行删除。
格式:d<行号1>[<空格><行号2>]<回车>;删除活区中第<行号1>行(到第<行号2>行)。
(3)活区切换。
格式:n<回车>将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。
(4)活区显示。
格式:p<回车>逐页地(每页20行)显示活区内容,在每显示的一页之后请用户决定是否继续显示以后各页(如果存在)。
印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。
各条命令中的行号均须在活区中各行号范围之内,只有插入命令的行号可以等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。
二、概要设计1、主页面设计2、存储结构设计typedef struct text{char string[SIZE];//存储每一行的元素struct text *next;//指向后一个节点的指针int length;}text,*textp;3、系统功能设计1)行插入2)行删除3)活区切换4)活区显示5)结束4、程序调用关系程序结构流程图:三、详细设计1 、数据结构存储定义typedef struct text{char string[SIZE];//存储每一行的元素struct text *next;//指向后一个节点的指针 int length;}text,*textp;2、行插入int insert(textp &head,FILE *out){int hang,i;textp p,p1;scanf("%d",&hang);p=(textp)malloc(sizeof(text));//为插入行分配空间fflush(stdin);fgets(p->string,80,stdin); /*输入插入行的内容*/p1=head->next;if(head->length==ActiveMaxLen)fputs(p1->string,out);else{if(hang==1){p->next=head->next;head->next=p;head->length++;}else{for(i=2;i<hang;i++)p1=p1->next;p->next=p1->next;p1->next=p;head->length++;}}printf("在第%d行前插入完成\n",hang);return OK;}3、行删除int del(textp &head) //删除d命令对应的函数,用来删max-min中的行,用结构体中的flat表示是否被删除{text *p,*q;int min,max,i;scanf("%d %d",&min,&max);if(head==NULL){printf("\nlist null!\n");return OK;}p=head;for(i=1;i<min;i++)/*找到要删除的第一行的前一行*/p=p->next;for(i=i-1,q=p->next;i<max;i++)/*删除到最后一行*/{p->next=q->next;free(q);q=p->next;}head->length--;printf("第%d行到第%d行删除完成!\n",min,max);return OK;}4、活区切换Status LoadFile(textp head,FILE *fp) /*从文件读内容到活区*/{textp p;for(p=head;p&&(!feof(fp));p=p->next){if(!fgets(p->string,80,fp)) break;p->flat=1;}return 0;}Status SaveFile(textp head,FILE *out) /*存储活区的函数*/{textp p;for(p=head;p;p=p->next)if(p->flat==1){fputs(p->string,out); /*输出活区的内容到指定的文件*/p->flat=0;}return OK;}5、活区显示void display(textp head)//显示P命令对应的函数,用来显示活区的内容{int i;int j=head->length/20;int k=0;textp p=head->next;for(j=0;j<=head->length/20;j++){printf("**********************page%d************************\n",j+1);for(i=20*j+1;i<=head->length;p=p->next,i++) {printf("%2d",i);printf(" %s",p->string);if(i%20==0)break;}printf("是否继续显示下一页,是输入1,否输入0.\n");scanf("%d",&k);if(k==0)break;if(j==head->length/20-1){printf("没有后续页面了\n");break;}}}四、测试分析1.开始界面2.用户输入一个已经存在的文本文件名称——in.txt并回车,程序将读出内容并存入一个新的文本文件——out中。
并输入命令p,显示。
3.输入命令i,在文本文件中插入文本。
4.输入命令d,删除选中文本。
并输入命令p,显示当前活区。
5.输入命令n,切换活区。
并输入命令平,显示。
6.输入命令e,结束程序并清除活区。
五、源程序设计#include<string.h>#include<stdio.h>#include<stdlib.h>#include<io.h>#include<process.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define ActiveMaxLen 100#define SIZE 80#define x 20typedef struct text{char string[SIZE];//存储每一行的元素struct text *next;//指向后一个节点的指针int length;}text,*textp;void Createlist(textp &head)//建立一个80个节点的链表,是整个活区的大小{head=(text *)malloc(sizeof(text));int n=0;head->length=0;textp p,q;while(n<80){p=(text *)malloc(sizeof(text));n++;if(n==1){head->next=p;p->next=NULL;q=p;head->length++;}else{p->next=q->next;q->next=p;q=p;head->length++;}}printf("活区创建完成\n");}int del(textp &head)//删除d命令对应的函数,用来删max-min中的行,用结构体中的flat表示是否被删除{text *p,*q;int min,max,i;scanf("%d %d",&min,&max);if(head==NULL){printf("\nlist null!\n");return OK;}p=head;for(i=1;i<min;i++)/*找到要删除的第一行的前一行*/p=p->next;for(i=i-1,q=p->next;i<max;i++)/*删除到最后一行*/{p->next=q->next;free(q);q=p->next;}head->length--;printf("第%d行到第%d行删除完成!\n",min,max);return OK;}void display(textp head)//显示P命令对应的函数,用来显示活区的内容{int i;int j=head->length/20;int k=0;textp p=head->next;for(j=0;j<=head->length/20;j++){printf("**********************page%d************************\n",j +1);for(i=20*j+1;i<=head->length;p=p->next,i++){printf("%2d",i);printf(" %s",p->string);if(i%20==0)break;}printf("是否继续显示下一页,是输入1,否输入0.\n");scanf("%d",&k);if(k==0)break;if(j==head->length/20-1){printf("没有后续页面了\n");break;}}}void freemem(textp &head)//释放链表所占的内存{text *p=head->next;while(p){head->next=p->next;free(p);p=head->next;head->length--;}printf("活区清除\n");}int insert(textp &head,FILE *out){int hang,i;textp p,p1;scanf("%d",&hang);p=(textp)malloc(sizeof(text));//为插入行分配空间fflush(stdin);fgets(p->string,80,stdin); /*输入插入行的内容*/ p1=head->next;if(head->length==ActiveMaxLen)fputs(p1->string,out);else{if(hang==1){p->next=head->next;head->next=p;head->length++;}else{for(i=2;i<hang;i++)p1=p1->next;p->next=p1->next;p1->next=p;head->length++;}}printf("在第%d行前插入完成\n",hang);return OK;void LoadFile(textp &head,FILE *fp,int e) /*从文件读内容到活区*/{textp p=head->next;for(int j=0;j<e;j++)fgets(head->string,81,fp);for(int i=0;i<head->length&&(!feof(fp));i++){fgets(p->string,81,fp);p=p->next;}}void SaveFile(textp head,FILE *out,FILE *in,int &e) /*存储活区的函数*/{textp p=head->next;e=e+80;for(int i=0;i<head->length;p=p->next,i++)fputs(p->string,out);}void HELP()//帮助函数,显示一些命令的格式{printf("\n\t**********************************************************\n");printf("\t *** 行插入格式: i<行号><回车><文本><回车> **\n");printf("\t *** 行删除格式: d<回车><行号1>[<空格><行号2>]<回车> **\n");printf("\t *** 活区切换格式: n<回车> **\n");printf("\t *** 活区显示格式: p<回车> **\n");printf("\t *** 退出格式: e<回车> **\n");printf("\t**********************************************************\n");}void main()//主函数,用来接受命令//编辑函数,用来接受处理编辑命令{int e=0;textp head;FILE *in,*out;char c,inname[30],outname[30];printf("################################欢迎使用行编辑程序#############################\n");HELP();/*打开输入、输出文件*/printf("Enter the infile name:");scanf("%s",inname);printf("Enter the outfile name:");scanf("%s",outname);if((in=fopen("in.txt","r"))==NULL)printf("can't open the file! \n");if((out=fopen(outname,"w"))==NULL){printf("can't iiopen the file!\n");exit(0);}Createlist(head);LoadFile(head,in,e);do{printf("input order:");fflush(stdin);c=getchar();switch(c){case 'p':display(head);break;case 'n':SaveFile(head,out,in,e);LoadFile(head,in,e);printf("活区切换...\n完成\n");break;case 'd':del(head);break;case 'i': /*插入行*/insert(head,in);break;case'e':printf("结束!\n");break;default:printf("\n\n\n!!!input error!!!"); break; /*命令格式非法提示*/}}while(c!='e');freemem(head);}六、用户手册(1)进入程序的界面,出现命令的帮助信息,按任意键开始程序编辑。