文档章节

模拟实现getch()

幽鬼
 幽鬼
发布于 2013/03/02 21:11
字数 250
阅读 966
收藏 2

上学期在写了一个小项目,现在想把它移植到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
0
getch() getche() getchar()的区别

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

晨曦之光
2012/04/13
126
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
212
1
区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets

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

晨曦之光
2012/03/09
203
0
用C语言做一个横板过关类型的控制台游戏

前言:本教程是写给刚学会C语言基本语法不久的新生们。 因为在学习C语言途中,往往只能写控制台代码,而还能没接触到图形,也就基本碰不到游戏开发。 所以本教程希望可以给仍在学习C语言的新...

KillerAery
10/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

重磅!亚洲诚信实力斩获:“2018 DigiCert/Symantec 年度最佳创新合作伙伴”大奖

2018年11月13日-16日,全球顶级数字证书厂商,DigiCert/Symantec亚太区圆桌会议(Asia Partner Roundtable 2018)在日本大阪隆重召开。 亚洲诚信作为DigiCert/Symantec亚太区白金战略合作伙伴和...

亚洲诚信
20分钟前
2
0
始于阿里,回归社区:阿里8个项目进入CNCF云原生全景图

摘要: 一群技术理想主义者,与太平洋另一边的技术高手们正面PK,在这场躲不开的战役中,一起认真一把。 破土而出的生命力,源自理想主义者心底对技术的信念。 云原生技术正席卷全球,云原生...

阿里云官方博客
28分钟前
3
0
修改this指向(bind、call 和 apply)

一、bind bind 的其中一个用法就是:绑定函数,使其无论怎么样调用都用相同的 this 示例: var obj = { getThis: function() { console.log(this); }};obj.getThis()...

文文1
今天
1
0
WSL安装JDK8

下载地址 JDK_URL https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html UNLIMITED_STRENGTH_URL https://www.oracle.com/technetwork/java/javase/down......

terwergreen
今天
4
0
sparkStreaming基本概念

概述 Spark Streaming 是 Spark Core API 的扩展, 它支持弹性的, 高吞吐的, 容错的实时数据流的处理. 数据可以通过多种数据源获取, 例如 Kafka, Flume, Kinesis 以及 TCP sockets, 也可以通过...

freeli
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部