广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现简易文本编辑器
  • 481
分享到

C语言实现简易文本编辑器

2024-04-02 19:04:59 481人浏览 八月长安
摘要

本程序要求完成一个简易文本编辑器,能够完成文本的录入、编辑、删除、查找,并能够完成文件的存取。 在文本编辑软件中把用户输入的所有文本内容作为一个字符串。虽然各种文本编辑软件的功能有强

本程序要求完成一个简易文本编辑器,能够完成文本的录入、编辑、删除、查找,并能够完成文件的存取。

在文本编辑软件中把用户输入的所有文本内容作为一个字符串。虽然各种文本编辑软件的功能有强弱差别,但是基本操作都包括串的输入、修改、删除(包括整行删除和一行中的子串删除)、查找、输出等。通过分析,系统应该包括以下功能:

1、具有简单的文字或图形菜单界面
2、能实现串或文本块的查找、替换、删除、插入、移动操作。
3、能实现文本文件的存盘和读取功能。
4、具有友好的界面和较强的容错能力

设计思路

1、采用的逻辑结构

文本编辑器主要是针对文本进行编辑,文本的操作就是对字符的操作。文本编辑器可以从行、列两个方向进行编辑。

每一行可以看成一个线性表,线性表是一种线性结构,线性结构的特点是数据元素之间为线性关系,数据元素“一个接一个的排列”。在一个线性表中数据元素的类型是相同的,由于每一行可以存储的最大字数是相同的,行方向所有线性表的最大长度可以设置成相同的。行与行之间的关系也可以看成一个线性表。

2、采用的存储结构

线性表的存储分为两种:顺序存储和链式存储。

顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称为顺序表。在程序设计语言中,一维数组在内存中占用的存储空间就是一组连续的存储区域,因此,用一维数组来表示顺序表的数据存储区域是再合适不过的。

链式存储是通过-组任意的存储单元来存储线性表中的数据元素的,为建立数据元系之间的线性关系,对每个数据元素除了存放数据元素自身的信息之外,还需要和一起存放其后继或前驱所在的存储单元的地址,这两部分信息组成一个“结点”,每个元素都如此。存放数据元素信息的称为数据域,存放其前驱或后继地址的称为指针域。只有一个存储单元地址的为单链表,有两个存储单元地址的为双链表。

考虑到实际的功能需求,每行的线性表可以用顺序存储方式,每个字符是一个节点。用数组的长度表示本行可以输入的最大字符。行与行之间的线性表采用双链表存储,每个节点包括四个区域,一个指针域prior指向上一行,一个指针域next指向下一行,一个数据域num是行号,一个数据域是本行的字符数组。程序以行和列标识文本位置,行采用双向链表存储行信息,用数组下标标识列信息,从而能够准确定位字符位置,然后进行查找、替换、插入、块移动、删除等多种操作。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_LEN 100
#define NOT_FOUND -1
//定义行结构体:
struct line
{
 char text[MAX_LEN];  //本行文本
 int num;  //行号
 struct line *next; //指向下一个行的指针
 struct line *prior; //指向前一个行的指针
};
int lnum;
struct line *start;     //指向线性表中第一行的指针
struct line *last;     //指向线性表中最后一行的指针
struct line *find(int);    //查找指定行是否存在
void patchup(int, int);    //对当前行以后的每行的行号加1或
void delete_text(int);     //删除一行文字
void list();   //显示文件的全部内容
void save();   //保存文件
void load();   //打开文件,初始化线性表
void insert(char str[], int linenum, int position); //插入文字到一行的中间
void printline(int linenum);   //打印一行文字
void deletestr(int linenum, int position, int lenth); //删除一个字符串
int findstr(char * to_find);  //查找字符串
int menu_select();        //显示主菜单
int menu_select_insert();//显示插入功能子菜单
int menu_select_delete();//显示删除功能子菜单
int menu_select_print(); //显示打印功能子菜单
int menu_select_move();  //显示移动功能子菜单
void enter(int linenum); //插入一行文字
void enter_empty(int linenum); //插入一个空白行
//下列函数是系统主函数,提供系统主界面,通过选择项转入执行插入、删除、查存盘、读人文件等功能的界面。
int main(void)
{
 char str[MAX_LEN];
 int choice;
 int linenum = 1;
 int number = 0;
 start = NULL;
 last = NULL;
 load(); //打开文件,初始化线性表
 do{
  choice = menu_select();
  switch (choice)
  {
  case 1:  //执行插入功能 
   choice = menu_select_insert();//显示插入子菜单
   switch (choice)
   {
   case 1:   //插入一行
    printf("\t行号:");
    scanf("%d", &linenum);
    enter(linenum);
    break;
   case 2:  //插入到指定行的指定列
    printf("输入插入位置一行号:");
    scanf("%d", &linenum);
    printf("输入插入位置-列号:");
    scanf("%d", &number);
    printf("要插入的字符串:");
    scanf("%s", str);
    insert(str, linenum, number);
    break;
 
   case 3:   //退出插入
    break;
   }
   break;
  case 2:   //执行删除功能
   choice = menu_select_delete();  // 删除子菜单
   switch (choice)
   {
   case 1:   //删除指定行
    printf("\t行号:");
    scanf("%d", &linenum);
    break;
   case 2:   //删除指定的字符串
    printf("要删除的字符串:");
    scanf("%s", str);
    number = findstr(str);
    if (number == NOT_FOUND)
     printf("没有找到");
    else
     deletestr(lnum, number, strlen(str));
    break;
   case 3:  //退出删除
    break;
   }
   break;
  case 3:   //执行显示功能
   choice = menu_select_print(); //显示子菜单
   switch (choice)  //显示指定行
   {
   case 1:
    printf("\t行号:");
    scanf("%d", &linenum);
    printline(linenum);
    break;
   case 2:  //显示全部
    list();
    break;
   case 3:  //退出显示
    break;
   }
   break;
  case 4:   //执行查找功能
   printf("输入想要查找的字符串:");
   scanf("%s", str);
   number = findstr(str);
   if (number == NOT_FOUND)
    printf("没有找到");
   else
    printf("要查找的字符串所在行号:%d,列号:%d\n", lnum, number + 1);
   break;
  case 5:  //执行替换功能
   printf("输入被替换的字符串:");
   scanf("%s", str);
   number = findstr(str);
   if (number == NOT_FOUND)
    printf("没有找到");
   else
   {
    deletestr(lnum, number, strlen(str));
    printf("要替换的字符串:");
    scanf("%s", str);
    insert(str, lnum, number + 1);
   }
   break;
 
  case 6:     //执行移动功能
   choice = menu_select_move();   //移动子菜单
   switch (choice)
   {
   case 1:   // 向下移动一行
    printf("输人要移动的字符串所在行号:");
    scanf("%d", &linenum);
    enter_empty(linenum);
    break;
   case 2:   //向上移动一行
    printf("输入要移动的字符串所在行号:");
    scanf("%d", &linenum);
    delete_text(linenum - 1);
    break;
   case 3:   //向右移动一列
    printf("输人要移动的字符串所在行号:");
    scanf("%d", &linenum);
    printf("输入要移动的字符串所在列号:");
    scanf("%d", &number);
    str[0] = ' ';
    str[1] = '\0';
    insert(str, linenum, number);
    break;
   case 4:   //向左移动
    printf("输入要移动的字符串所在行号:");
    scanf("%d", &linenum);
    printf("输入要移动的字符串所在列号:");
    scanf("%d", &number);
    if (number <= 0)
     printf("该列不存在");
    else
     deletestr(linenum, number - 2, 1);
    break;
   case 5:   //退出移动
    break;
   }
   break;
  case 7:  //执行存盘功能
   save();
   break;
  case 8:  //执行读入文件功能
   load();
   break;
  case 9:  //执行退出功能
   exit(0);
   break;
  }
 } while (1);
 return 0;
}
//下列函数是主菜单功能的提示界面,其功能是说明主菜单中选项
int menu_select()
{
 int c;
 printf("\n\t\t1.插入\n");
 printf("\t\t2.删除\n");
 printf("\t\t3.显示\n");
 printf("\t\t4.查找\n");
 printf("\t\t5.替换\n");
 printf("\t\t6.移动\n");
 printf("\t\t7.文件存盘\n");
 printf("\t\t8.装入文件\n");
 printf("\t\t9.退出\n");
 do
 {
  printf("\n\n\t\t请按数字选择:");
  scanf("%d", &c);
 } while (!(c >= 1 && c <= 9));
 return(c);
}
 
//下列函数是插入子菜单功能的提示界面,其功能是说明在插入菜单下选项的含义。
int menu_select_insert()
{
 int c;
 printf("\n\t\t1.插入一行文字\n");
 printf("\t\t2.插入一段文字\n");
 printf("\t\t3.返回上级菜单\n");
 do{
  printf("\n\n\t\t请按数字选择:");
  scanf("%d", &c);
 } while (!(c >= 1 && c <= 3));
 return(c);
}
//下列函数是删除子菜单功能的提示界面,其功能是说明在删除子菜单下选项的含义。
int menu_select_delete()
{
 int c;
 printf("\n\t\t1.删除一行文字\n");
 printf("\t\t2.删除一段文字\n");
 printf("\t\t3.返回上级菜单\n");
 do{
  printf("\n\n\t\t请按数字选择:");
  scanf("%d", &c);
 } while (!(c >= 1 && c <= 3));
 return(c);
}
//下列函数是显示子菜单功能的提示界面,其功能是说明在显示子菜单下选项的含义
int menu_select_print()
{
 int c;
 printf("\n\t\t1.显示一行\n");
 printf("\t\t2.全部显示\n");
 printf("\t\t3.返回上级菜单\n");
 do{
  printf("\n\n\t\t请按数字选择:");
  scanf("%d", &c);
 }while(!(c >= 1 && c <= 3));
 return(c);
}
//下列函数是移动子菜单功能的提示界面,其功能是说明在移动子菜单下选项的含义
int menu_select_move()
{
 int c;
 printf("\n\t\t1.向下移动一行\n");
 printf("\t\t2.向上移动一行\n");
 printf("\t\t3.向右移动一列\n");
 printf("\t\t4.向左移动一列\n");
 printf("\t\t5.返回上级菜单\n");
 do{
  printf("\n\n\t\t请按数字选择:");
  scanf("%d", &c);
 } while (!(c >= 1 && c <= 5));
 return(c);
}
//下列函数的功能是在指定的行号 linenum处插入一行文字。
void enter(int linenum)
{
 struct line * info, * q, * p;
 p = start;
 q = NULL;
 while (p && p->num != linenum) //找到插入行
 {
  q = p;
  p = p->next;
 }
 if (p == NULL && (q->num + 1) != linenum) //指定行不存在,不能插入
 {
  printf("输入的行号不存在");
 }
 else // 指定行存在,进行插入
 {
  info = (struct line *)malloc(sizeof(struct line));
  printf("输入要输入的字符串");
  scanf("%s", info->text);
  info->num = linenum;
  if (linenum == 1)  //插入在第一行
  {
   info->next = p;
   p->prior = info;
   info->prior = NULL;
   start = info;
  }
  else if (q->num != linenum)  //插入在最后一行
  {
   q->next = info;
   info->next = p;
   info->prior = q;
  }
  else     //插入在其他行
  {
   q->next = info;
   info->next = p;
   p->prior = info;
   info->prior = q;
  }
  while (p)   //如果不是插入在最后一行,插入行后面的行号都加1
  {
   p->num = p->num + 1;
   p = p->next;
  }
 }
}
 
//下列函数是为其他功能提供的一个辅助函数,它的功能是当文本内容插在文件中间时
//其下面的内容的行号必须增加1,而删除时,被删除的文本后面的行号必减1.
void patchup(int n, int incr)
{
 struct line *i;
 i = find(n);
 i = i->next;
 while (i)
 {
  i->num = i->num + incr;
  i = i->next;
 }
}
//下列函数的功能是在指定行处插入一个空白行。
void enter_empty(int linenum)
{
 struct line *info, *p;
 info = (struct line *)malloc(sizeof(struct line));
 if (!info)
 {
  printf("\t!内存不够!\n");
  exit(0);
 }
 info->text[0] = ' ';
 info->text[1] = '\0';
 info->num = linenum;
 if (find(linenum))    //如果要插人的行号存在,则进行插入
 {
  p = start;
  if (linenum == 1)    //插入在首行
  {
   info->next = p;
   start = info;
   info->prior = NULL;
   p->prior = info;
  }
  else  //插入在其他行
  {
   while (p->next->num != linenum)
    p = p->next;
   info->next = p->next;
   p->next->prior = info;
   p->next = info;
   info->prior = p;
  }
  patchup(linenum, 1);
 }
 else
  printf("该行不存在");
}
 
//下列函数的功能是插入文字到一行的中间。要是插入位置和现有位置中间有间隔,会补全空格
void insert(char str[], int linenum, int position)
{
 struct line * info;
 int len, i;
 int lenth;
 char rest_str[MAX_LEN], nostr[2] = { " " };
 info = start;
 while (info && info->num != linenum)   //查询要插入的行
 {
  info = info->next;
 }
 if (info == NULL)
  printf("不存在该行!\n");
 else if (position < 0)
  printf("不存在该列!\n");
 else    //如果行和列都存在,则进行插入
 {
  lenth = strlen(info->text);
  if (lenth < position) //插入列大于本行文件列数
  {
   len = position - lenth - 1;
   for (i = 0; i < len; i++)
    strcat(info->text, nostr);   //将空余的部分插入空格符
   strcat(info->text, str);    //插入字符到列的未尾
  }
  else   //插入列在本行文字的中间
  {
   strcpy(rest_str, &info->text[position - 1]);
   strcpy(&info->text[position - 1], str);
   strcat(info->text, rest_str);
  }
 }
}
 
//下列函数的功能是删除指定行、指定位置、长度为 lenth的一段文字。
void deletestr(int linenum, int position, int lenth)
{
 struct line * info;
 char rest_str[MAX_LEN];
 info = find(linenum);
 if (info == NULL)
  printf("该行没有字符!n");
 else
 {
  if (strlen(info->text) <= (position + lenth))  //本行的字符长度<=待删除的列号+删除长度,直接在当前位置插入'\0'
   info->text[position] = '\0';
  else
  {
   strcpy(rest_str, &info->text[position + lenth]);
   strcpy(&info->text[position], rest_str);
  }
 }
}
//下列函数的功能是删除指定行号 lineup的文字。
void delete_text(int linenum)
{
 struct line * info, *p;
 info = start;
 while ((info->num < linenum) && info)
  info = info->next;
 if (info->next == NULL)
  printf("该行不存在");
 else
 {
  p = info->next;
  if (start == info) //如果删除的是第一行
  {
   start = info->next;
   if (start)  //如果删除后,不为空
    start->prior = NULL;
   else  //删除后为空
    last = NULL;
  }
  else
  {
   info->prior->next = info->next;  //指定行的上一行指向指定行的下一行
   if (info != last) //如果不是最后一行
    info->next->prior = info->prior;  //修改其下一行的指向头的指针 
   else  //如果是最后一行,修改尾指针
    last = info->prior;
  }
  free(info);
  while (p)
  {
   p->num = p->num - 1;
   p = p->next;
  }
 }
}
//下列函数的功能是查找一段文字。
int findstr(char * to_find)
{
 struct line * info;
 int i = 0, find_len, found = 0, position;
 char substring[MAX_LEN];
 info = start;
 lnum = 0;  //匹配到的行号
 find_len = strlen(to_find);
 while (info && !found)   //查询
 {
  i = 0;  //行间循环
  while (!found && (i <= strlen(info->text) - find_len))  //行内查找循环
  {
   strcpy(substring, &info->text[i], find_len);
   substring[find_len] = '\0';
   if (strcmp(substring, to_find) == 0)
   {
    found = 1;
    lnum = info->num;
   }
   else
    ++i;
  }
  info = info->next;
 }
 if (found)  //查找成功
  position = i;
 else   //查找不成功
  position = NOT_FOUND;
 return(position);
}
//下列函数的功能是查找指定行,如果查找成功返回结点所在的行指针。
struct line * find(int linenum)
{
 struct line * info;
 info = start;
 while (info)
 {
  if (linenum != info->num)
   info = info->next;
  else
   break;
 }
 return (info);
}
 
//下列函数的功能是显示指定行
void printline(int linenum)
{
 struct line *info;
 info = find(linenum);
 if (info)
  printf("%d:%s\n", info->num, info->text);
 else
  printf("该行不存在");
}
//下列函数的功能是显示线性表中的所有文本
void list()
{
 struct line * info;
 info = start;
 while (info)
 {
  printf("%d:%s\n", info->num, info->text);
  info = info->next;
 }
 printf("\n\n");
}
//下列函数的功能是把线性表中的所有文字保存到文件中
void save()
{
 struct line * info;
 char * p;
 FILE * fp;
 if ((fp = fopen("D:\\text.txt", "w")) == NULL){
  printf("\t文件打不开!n");
  exit(0);
 }
 printf("\t正在存入文件!\n");
 info = start;
 while (info)
 {
  p = info->text;
  while (*p)
   putc(*p++, fp);
  putc('\n', fp);
  info = info->next;
 }
 fclose(fp);
}
//下列函数的功能是把文本文件中的内容读入到线性表中。
void load()
{
 struct line *info, *temp;  //info指向当前行,temp指向info的前驱行
 char c;
 FILE *fp;  //文件指针
 int inct, i;  //行计数器
 temp = NULL;
 if ((fp = fopen("D:\\text.txt", "r")) == NULL)
 {
  printf("\t文件打不开!\n");
  exit(0);
 }
 printf("\n\t正装入文件!\n");
 start = (struct line*)malloc(sizeof(struct line)); //动态生成一行的结点空间
 info = start;
 inct = 1;
 while ((c = fgetc(fp)) != EOF)
 {
  i = 0;
  info->text[i] = c;
  i++;
  while ((c = fgetc(fp)) != '\n')  //从文件中读取一行字符到线性表中,文件中每一行以\n为结束标
  {
   info->text[i] = c;
   i++;
  }
  info->text[i] = '\0';  //线性表中每行末尾的结束标志
  info->num = inct++;  //行号和计数器都加1
  info->next = (struct line*)malloc(sizeof(struct line));
  if (!info->next)
  {
   printf("\n\t内存已经用完!");
   exit(0);
  }
  info->prior = temp;
  temp = info;
  info = info->next;
 }
 temp->next = NULL;
 last = temp;
 free(info);
 start->prior = NULL;
 fclose(fp);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言实现简易文本编辑器

本文链接: https://www.lsjlt.com/news/125455.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现简易文本编辑器
    本程序要求完成一个简易文本编辑器,能够完成文本的录入、编辑、删除、查找,并能够完成文件的存取。 在文本编辑软件中把用户输入的所有文本内容作为一个字符串。虽然各种文本编辑软件的功能有强...
    99+
    2022-11-12
  • C语言如何实现简易文本编辑器
    这篇文章主要介绍了C语言如何实现简易文本编辑器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,...
    99+
    2023-06-15
  • C语言实现简易文本编译器
    数据结构课程设计之简易文本编译器(C语言实现) 需求分析 (1)具有图形菜单界面:显示实时年份,日期,星期及时间 (2)  查找:查找文本中的字符串,显示其出现的行数,列数...
    99+
    2022-11-12
  • C语言实现简单的文本编辑器
    本文实例为大家分享了C语言实现简单的文本编辑器的具体代码,供大家参考,具体内容如下 预期实现三个功能,第一,可以对指定的行输入字符串;第二,删除指定行的字符串;第三,显示编辑器的行数...
    99+
    2022-11-12
  • C语言如何实现简易文本编译器
    这篇文章将为大家详细讲解有关C语言如何实现简易文本编译器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易...
    99+
    2023-06-15
  • C语言如何实现简单的文本编辑器
    这篇文章将为大家详细讲解有关C语言如何实现简单的文本编辑器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下预期实现三个功能,第一,可以对指定的行输入字符串;第二,删除指定行的字符串;第三,显示编...
    99+
    2023-06-15
  • C语言实现简易计算器功能
    本文实例为大家分享了C语言实现简易计算器功能的具体代码,供大家参考,具体内容如下 表达式求值项目(多功能计算器)。该项目主要包含了10个模块,10项功能: 1:加法运算:主要进行两个...
    99+
    2022-11-13
  • C语言实现简易三子棋
    前言 检验学习成果最好的方式是实践,在学习完C语言的函数和数组以后,就可以简易的实现一些小游戏,本文将介绍如何实现三字棋小游戏。欢迎探讨 思路分析 三子棋的规则是在3X3的棋盘里,率...
    99+
    2022-11-12
  • 怎么用C语言脚本实现简易通讯录
    这篇文章主要介绍“怎么用C语言脚本实现简易通讯录”,在日常操作中,相信很多人在怎么用C语言脚本实现简易通讯录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C语言脚本实现简易通讯录”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • C语言实现简易订餐系统
    本文实例为大家分享了C语言实现简易订餐系统的具体代码,供大家参考,具体内容如下 主要功能: (1)菜单维护(餐厅管理人员使用)采用顺序表实现 1、添加新菜 2、删除菜品 3、修改菜品...
    99+
    2022-11-13
  • C语言实现简易扫雷程序
    前言 前面写了三子棋的小游戏,感觉不过瘾,今天再来一个扫雷的小游戏。欢迎评论探讨 思路分析 游戏简介 说到扫雷很容易想起很多个方形格子,表面什么也没有,点击其中一个小格子,如果时炸弹...
    99+
    2022-11-12
  • C语言实现简易通讯录实例
    目录一、问题描述二、功能介绍二、实现流程1.创建通讯录2.创建源文件test.c3.创建源文件contact.c4.删除通讯录联系人信息 (DelContact函数实现)5...
    99+
    2022-11-13
  • C语言实现简易版扫雷游戏
    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 这个小项目源自两个月前学数组的时候,由于觉得比较重要,想记录一下。 首先,大概的思路是要做出两个二维数组充...
    99+
    2022-11-12
  • C语言实现简易的扫雷游戏
    本文实例为大家分享了C语言实现简易的扫雷游戏的具体代码,供大家参考,具体内容如下 在正式讲内容之前先说一说扫雷游戏的规则 游戏规则很简单,点击方格,如果是地雷,游戏失败,找到所有地...
    99+
    2022-11-12
  • C语言怎样实现简易三子棋
    这篇文章将为大家详细讲解有关C语言怎样实现简易三子棋,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言检验学习成果最好的方式是实践,在学习完C语言的函数和数组以后,就可以简易的实现一些小游戏,本文将介绍如...
    99+
    2023-06-20
  • C语言实现简易井字棋游戏
    井子棋承载了每个人孩童时的美好时光,小到书本、纸张,大到课桌、墙壁,总能找到井字棋盘的痕迹。今天我们就来实际操作一番,用C语言完成一个简单的井字棋游戏,让我们一起重温美好。 棋盘如下...
    99+
    2022-11-12
  • C语言实现简易三子棋游戏
    利用数组来创建一个三子棋小游戏的步骤如下: 1、建立一个可以容纳九个元素的3*3棋盘。并初始化,使所有位置都为三。 2、打印棋盘,使其尽可能美观。 3、玩家通过输入坐标(row,co...
    99+
    2022-11-12
  • C语言链表实现简易通讯录
    本文实例为大家分享了C语言链表实现简易通讯录的具体代码,供大家参考,具体内容如下 链表实现通讯录功能: 1.添加–(输入 姓名,电话) 2.删除-- (输入人名,删除该人) 3.查询...
    99+
    2022-11-12
  • C语言实现简易网络聊天室
    本文实例为大家分享了C语言实现网络聊天室的具体代码,供大家参考,具体内容如下 业务逻辑: 1、客户端注册名字 2、告诉所有在线的客户端,XXX进入聊天室 3、新建一个线程为该客户端服...
    99+
    2022-11-12
  • C语言简易实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 经典扫雷游戏规则: 当玩家点击游戏区域,该处周围的八个位置有几个雷(如果是角落则是周边三个位置雷的个数,...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作