C语言实现简单的打字程序
2018-03-20 11:57
1236 查看
/*********************************************** * 文件名:typeWroe.c * 文件描述:实现简易的字符界面的打字程序-linux平台下 * 编写人: 王廷云 * 编写日期: 2017-10-17 * 修改日期: 2018-2-10 ***********************************************/ #include <stdio.h> #include <string.h> #include <stdlib.h> /* 按键输入枚举 */ enum input_e { BACK, // 退格 LEFT, // 左键 RIGHT, // 右键 NOMAL, // 普通字符 UNKNOW, // 特殊功能按键 }; /* 功能函数声明 */ int getInput(char *dest, int *idx); void showChar(char const *src, char *dest, int idx); void deleteChar(char *dest, int *idx); /* * 程序从主函数开始 * 思路: * 1.关闭系统默认的获取输入通道 * 2.使用字符数组保存用户输入的字符 * 3.打印字符并检查输入字符输入情况 */ int main(void) { char src[] = "This is a simple typing program."; // 用于对照的字符串 char dest[100] = {0}; // 存储用户的字符 int idx = 0; // 光标位置 int key; // 用户输入 /* 初始化设置 */ system("stty -icanon"); // 关缓冲 system("stty -echo"); // 关回显 system("clear"); // 清屏 /* 显示对照字符串 */ fprintf(stdout, "%s\n", src); /* 进入打字程序 */ while (1) { /* 获取输入 */ key = getInput(dest,&idx); /* 根据不同输入进行不同操作 */ switch (key) { case BACK : deleteChar(dest,&idx); break; case LEFT : if (idx > 0) idx--; break; case RIGHT: if (idx < strlen(dest)) idx++; break; default : break; } /* 显示结果 */ showChar(src,dest,idx); /* 打字结束 */ if (idx == sizeof(src)-1) { break; } } /* 程序结束后的配置恢复 */ system("stty icanon"); // 恢复缓冲 system("stty echo"); // 恢复回显 fputc('\n', stdout); return 0; } /* * 函数名: getInput() * 函数功能: 获取用户输入,普通字符保存在目标数组中 * 同时处理其它特殊字符:退格,回车,方向键 * 参数: 1.需要保存字符的目标数组; 2.光标位置 * 返回值: 返回用户输入对应的键值 */ int getInput(char *dest, int *idx) { int key, i; int len = strlen(dest); char ch; ch = getchar(); /* 方向键 */ if (ch == '\033' && getchar() == '[') { ch = getchar(); switch (ch) { case 'C': key = RIGHT; break; // 左键 case 'D': key = LEFT; break; // 右键 default : key = UNKNOW; break; } } /* 退格键 */ else if (ch == 127) { key = BACK; } /* 回车键 */ else if (ch == '\n') { key = UNKNOW; } /* 普通字符则需要保存 */ else { /* 先移动字符,后插入新字符实现字符输入 */ for (i = len; i > *idx; i--) { dest[i] = dest[i-1]; } dest[*idx] = ch; // 光标处插入字符 (*idx)++; // 光标右移 key = NOMAL; } return key; } /* * 函数名: showChar() * 函数功能: 显示源字符和用户输入的目标字符 * 并进行校对 * 参数: 1.源字符数组; 2.用户输入的目标字符数组 * 3.光标位置 * 返回值: 无 */ void showChar(char const *src, char *dest, int idx) { int i; printf("\033[2;1H"); /* 定位到第二行开头 */ printf("\033[K"); /* 清除该行内容 */ /* 打印用户的输入 */ for (i = 0; dest[i] != '\0'; i++) { /* 字符匹配显示绿色 */ if (dest[i] == src[i]) { printf("\033[32m%c\033[0m", dest[i]); } /* 字符不匹配显示红色 */ else { printf("\033[31m%c\033[0m", dest[i]); } } /* 光标定位到索引要处 */ printf("\033[2;%dH", idx+1); } /* * 函数名: deleteChar() * 函数功能: 删除光标所在位置的前一个字符 * 参数: 1.用户输入的目标字符数组; * 2.光标所在位置 * 返回值: 无 */ void deleteChar(char *dest, int *idx) { int i; if (*idx > 0) { /* 通过移动覆盖实现删除 */ for (i = *idx; dest[i] != 0; i++) { dest[i-1] = dest[i]; } dest[i-1] = '\0'; // 最后一个字符补0 (*idx)--; // 光标左移 } }
相关文章推荐
- 使用C语言实现简单的三子棋程序
- C语言简单校园导游程序的设计与实现
- C语言写的简单贪吃蛇程序,实现WASD控制蛇运动,输入输出流为C++
- 一个简单的四则运算程序C语言实现--实现处理括号
- C语言实现的一个简单的HTTP程序
- C语言实现的一个简单的HTTP程序
- C语言实现的一个简单的HTTP程序
- 赛码网,简单计算,用C语言自己实现的一个程序,仅供参考
- C语言实现的一个简单的HTTP程序
- Linux Socket 事件触发模型 epoll 示例 这里会写一个用C语言的TCP服务器的完全实现的简单程序
- 简单的C语言实现程序
- 《C语言到底能干什么》1.14 简单的整蛊——窗口抖动程序的实现
- 一个简单c语言windows程序的实现
- 模拟器与程序分析-4-一个简单的周期精确模拟器(CAS)的C语言实现
- C语言实现简单三子棋程序
- 一个大学C语言试题的简单实现--员工信息管理程序
- 使用C语言实现简单的扫雷程序
- 【C语言】没事可以试试这个小程序,使用文件操作,模拟实现一个简单的文件拷贝工具!
- C语言实现的一个简单的HTTP程序
- C语言实现的一个简单的HTTP程序