栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在C程序中移动光标

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在C程序中移动光标

使用

termios
和控制台代码(兼容VT100-非便携式):

#include <stdio.h>#include <string.h>#include <termios.h>#include <unistd.h>#define cursorforward(x) printf("33[%dC", (x))#define cursorbackward(x) printf("33[%dD", (x))#define KEY_ESCAPE  0x001b#define KEY_ENTER   0x000a#define KEY_UP      0x0105#define KEY_DOWN    0x0106#define KEY_LEFT    0x0107#define KEY_RIGHT   0x0108static struct termios term, oterm;static int getch(void);static int kbhit(void);static int kbesc(void);static int kbget(void);static int getch(void){    int c = 0;    tcgetattr(0, &oterm);    memcpy(&term, &oterm, sizeof(term));    term.c_lflag &= ~(ICANON | ECHO);    term.c_cc[VMIN] = 1;    term.c_cc[VTIME] = 0;    tcsetattr(0, TCSANOW, &term);    c = getchar();    tcsetattr(0, TCSANOW, &oterm);    return c;}static int kbhit(void){    int c = 0;    tcgetattr(0, &oterm);    memcpy(&term, &oterm, sizeof(term));    term.c_lflag &= ~(ICANON | ECHO);    term.c_cc[VMIN] = 0;    term.c_cc[VTIME] = 1;    tcsetattr(0, TCSANOW, &term);    c = getchar();    tcsetattr(0, TCSANOW, &oterm);    if (c != -1) ungetc(c, stdin);    return ((c != -1) ? 1 : 0);}static int kbesc(void){    int c;    if (!kbhit()) return KEY_ESCAPE;    c = getch();    if (c == '[') {        switch (getch()) { case 'A':     c = KEY_UP;     break; case 'B':     c = KEY_DOWN;     break; case 'C':     c = KEY_LEFT;     break; case 'D':     c = KEY_RIGHT;     break; default:     c = 0;     break;        }    } else {        c = 0;    }    if (c == 0) while (kbhit()) getch();    return c;}static int kbget(void){    int c;    c = getch();    return (c == KEY_ESCAPE) ? kbesc() : c;}int main(void){    int c;    while (1) {        c = kbget();        if (c == KEY_ENTER || c == KEY_ESCAPE || c == KEY_UP || c == KEY_DOWN) { break;        } else        if (c == KEY_RIGHT) { cursorbackward(1);        } else        if (c == KEY_LEFT) { cursorforward(1);        } else { putchar(c);        }    }    printf("n");    return 0;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405747.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号