文档章节

模拟实现getch()

幽鬼
 幽鬼
发布于 2013/03/02 21:11
字数 250
阅读 917
收藏 2
点赞 1
评论 0

上学期在写了一个小项目,现在想把它移植到linux上,但是getch()这个函数在linux中愣是让我使用不愉快,安装了个curese,在网上找了一堆东西都没解决。最后还是自己模拟实现一个感觉还简单些。代码如下

/*---------------------------------------
**  copyright (c) 2013-3-2 DeltaYang
**  E-mail: DeltaYang89@gmail.com
**  getch.c:模拟实现getch()
**--------------------------------------*/
#include <stdio.h>
#include <termios.h> //操作终端
#include <unistd.h>
#include <assert.h>
#include <string.h>

char getch() 
{
        int c=0;
        struct termios org_opts, new_opts;
        int res=0;
        //保留终端原来设置
        res=tcgetattr(STDIN_FILENO, &org_opts);
        assert(res==0);
        //从新设置终端参数
        memcpy(&new_opts, &org_opts, sizeof(new_opts));
        new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
        tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
        c=getchar();
        //恢复中断设置
        res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0);
        return c;
}
//测试模拟密码输入
int main(int argc,char** argv)
{
	int pwdlen=10;
	char ch[10];
	int i=0;
	printf("PASSWORD:");
	fflush(stdin);
	ch[0]=getch();
	while(ch[i]!='\n'&&i<9)
	{
		printf("*");
		i++;
		ch[i]=getch();
	}
	ch[i]='\0';
	printf("\n---->:%s\n",ch);
}
[delta@localhost:getch]$ gcc getch.c -o getch
[delta@localhost:getch]$ ./getch 
PASSWORD:********
---->:detlfhgh
[delta@localhost:getch]$

© 著作权归作者所有

共有 人打赏支持
幽鬼
粉丝 0
博文 9
码字总数 1223
作品 0
长沙
C语言中getch()、getche()和getchar()

本文章为转载文章,文档贡献者wdzhangxiang 个人网址:www.baidu.com/p/wdzhangxiang 首先不要忘了,要用getch()必须引入头文件conio.h,以前学C语言的时候,我们总喜欢用在程序的末尾加上它...

杨奉武 ⋅ 2015/10/08 ⋅ 0

getch() getche() getchar()的区别

1.输入输出缓冲区的概念(C++用的多一些) 我想以一个例子说明,比如我想把一篇文章以字符序列的方式输出到计算机显示器屏幕上,那么我的程序内存作为数据源而显示器驱动程序作为数据目标,...

晨曦之光 ⋅ 2012/04/13 ⋅ 0

计算机图形学中initgraph()的问题

//bresenham算法实现画直线功能 #include"stdio.h" #include"graphics.h" #include"stdlib.h" #include"conio.h" main(){ int gdriver=DETECT,gmode; int xLocation,yLocation; //记录x轴和y......

youhuang ⋅ 2012/11/23 ⋅ 1

区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets

首先,这两个函数不是C标准库中的函数, int getch(void) //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符。也就是,不带回显。 int getche(void) //从标准输入读...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

ubuntu下如何编译C语言

1.平台搭建 LInux下如果单纯是进行C编译环境搭建的话,是比较容易实现的,因为系统内置了编译器gcc,所以我们要做的只不过是写好c源文件然后在进行编译就可以了 如果没有gcc编译器的话,使用...

萧小蚁 ⋅ 2015/10/01 ⋅ 0

C/C++非阻塞键盘缓冲区读取方法?

如何实现windows下的非阻塞的键盘缓冲区读写。 getchar getche getch都不行scanf也不行啊。 linux可以fcntl( 0, FSETFL, ONONBLOCK);...

little_kid ⋅ 2014/10/10 ⋅ 1

linux中实现对输入的异步

1:传统的输入信号 传统的输入都是通过阻塞来实现,例如getchar一直等待用户输入。又或者是再curses库中的getch都是通过阻塞的方式来等待用户输入。那么想象一个场景要设计一个游戏,这个游戏...

Jeff_Linux ⋅ 2014/07/31 ⋅ 0

关于c语言文件问题fclose() 输出链表中内容

include #include #include #include #include struct student { char xuehao[15]; char xingming[20]; char xingbie[5]; char nianling[5]; char jiguan[30]; char xibie[30]; char zhuanye......

luxu ⋅ 2012/12/18 ⋅ 12

getchar()与getch()

#include <stdio.h>int main(int argc, char** argv){ int c=getchar(); while(c!='q') { if (c=='r') printf("CR"); else if (c=='n') printf("LF"); else printf("%c", c); c=getchar(); }......

小保哥 ⋅ 2015/11/15 ⋅ 0

C语言实现的推箱子小游戏

本次游戏是个推箱子第一关最简单的小游戏 游戏操作说明和功能说明: 按wasd控制小人的上下左右移动。 按 r 重新开始游戏 游戏开始有操作介绍 游戏结束有胜利提示 游戏原理分析 游戏开始时的星...

小辰GG ⋅ 2017/12/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 52分钟前 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部