Ubuntu下编写终端界面交互式C++小程序的一些Trick(小技巧,gnome-terminal)
类getch()功能的实现
I
只要在Windows下用过C/C++就会很熟悉conio.h库中的一个函数getch(),它可以绕过终端输入缓冲区直接从键盘读取一个字符,并且不在界面上显示。
但如果想直接在Linux环境下用是不行的,因为没有conio.h库的支持。
博主翻了网上的一些资料,在这里给出一个比较简明的实现,使用起来与Windows下没什么差异。
#include<cstdio>
#include<cstdlib>
inline char getch(){
static char ch;
system("stty -icanon -echo");
scanf("%c",&ch);
system("stty icanon echo");
return ch;
}
II
不知道大家有没有遇到这样的问题:平时所见的输入语句都需要等待我们输入完才会执行完成,什么都不做的话就会一直阻塞在那里。但我们有时想让程序在尝试接收读入失败的时候能够继续执行下去。这样要怎么实现呢?
我们需要一个函数fcntl,包含在fcntl.h中。使用它可以取消输入阻塞。关于它的更详细的内容可以百度。
我们还需要一个函数read,包含在unistd.h中,是一个底层的输入函数。
定义一个CustomGetch类,包含构造函数、析构函数和运算符()重载,再定义一个该类变量getch,用起来就像函数一样。
#include<cstdlib>
#include<fcntl.h>
#include<unistd.h>
class CustomGetch{
public:
CustomGetch(){
fcntl(0,F_SETFL,O_NONBLOCK);
system("stty -icanon -echo");
}
~CustomGetch(){
fcntl(0,F_SETFL,0);
system("stty icanon echo");
}
inline char operator()(){
static char ch;
return ~read(0,&ch,1)?ch:EOF;
}
}getch;
这样写有一个局限性:在这个变量的生存周期内,不能和其它的输入方式兼容。因此有两种处理方案:
- 在需要
getch()而不需要其它输入方式的语句块内定义临时变量。 - 直接像I中的那个
getch()一样写成函数。但考虑到实际应用中要频繁调用这个函数对输入流进行检查,而system操作相当耗时,所以不推荐这样做。
清屏
因为system("clear")是个假的清屏,所以我们需要更好的实现。
printf("\033c");
对,没了,就一行。
程序示例
#include<cstdio>
#include<cstdlib>
int main(){
for(int i=0;;++i){
printf("\033c");
for(int j=0;j<4;++j)puts(1&i?"abcdefg":"abcbefg");
system("sleep 1");
}
return 0;
}
更改输出起始位置、输出字体颜色
Linux终端有专门的转义字符。看这个博客
Ubuntu下编写终端界面交互式C++小程序的一些Trick(小技巧,gnome-terminal)的更多相关文章
- 在ubuntu下编写python(python入门)
在ubuntu下编写python 一般情况下,ubuntu已经安装了python,打开终端,直接输入python,即可进行python编写. 默认为python2 如果想写python3,在终端输入p ...
- 【linux基础】Ubuntu下的终端多标签切换快捷键
method: 方法一: alt+ alt+ alt+ 方法二: ctrl + pageUp ctrl + pageDown 方法三: Edit--> Keybord Shortcuts 到这里 ...
- 微信小程序开发详解——小程序,大颠覆!
微信小程序开发 联系 苏念 188.1414.7927 微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序 ...
- 微信小程序快速移植支付宝小程序
移植背景: 1. 支付宝小程序开发文档只了解了大致框架,跑了demo,具体Api.组件没太多了解: 2. 已有微信小程序,移植支付宝小程序做预研(主要针对授权登录.支付等功能). 3. 移植的微信小程 ...
- [转]微信小程序之购物车 —— 微信小程序实战商城系列(5)
本文转自:http://blog.csdn.net/michael_ouyang/article/details/70755892 续上一篇的文章:微信小程序之商品属性分类 —— 微信小程序实战商城 ...
- 微信小程序的开发——01小程序的执行流程是怎样的?
作者:叶小钗 转载至:https://www.cnblogs.com/yexiaochai/p/9346043.html 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是 ...
- QQ小程序开发与发布小教程
QQ小程序QQApp,和微信小程序类似,可以直接在手机QQ中直接打开,应用内应用,省去了安装手机APP,非常方便.官方的介绍:QQ小程序为QQ体系下的应用开放平台,可为不同类型的产品提供框架,并在QQ ...
- 写个小程序01 | 注册微信小程序
出于兴趣和学习目的,我想自己做一个基于"子弹笔记(Bullet Journal)"的小程序.由于个人开发经验很有限,只在课程作业中写过 web 前端,所以也不知道多久能写出来(逃) ...
- 微信小程序来了,小程序都能做些什么
2017年的微信大动作就是微信小程序了,到底小程序都能做些什么?这是很多人关注的热点,小程序开发对企业又有什么帮助呢?下面让厦门微信小程序开发公司来为你就分析下. 微信小程序与APP的关系 ...
随机推荐
- 软件工程(FZU2015) 学生博客列表(最终版)
FZU:福州大学软件工程 张老师的博客:http://www.cnblogs.com/easteast/ 经过前两周选课,最后正式选上课程的所有学生博客如下: 序号 学号后3位 博客 1 629 li ...
- Integer的NPE问题
- Redis趣谈一则
今天看代码,无意中发现Redis中的一行注释: ; /* The world is full of Solaris Fixes */ 这行代码在bio.c文件中. 看来程序员对操作系统多样性吐槽多多啊 ...
- 原生JS操作object HTMLTableSectionElement 对象,获取行数
html页面 <tbody id="infoTab"> <tr class="fomat"> <td class="bl ...
- [转帖]Linux 硬件和系统配置查看命令小结
https://blog.csdn.net/strongwangjiawei/article/details/8208825 转帖了不少 发现自己记住的还是不多.. Linux 硬件和系统配置查看命令 ...
- [转帖]csdn windows 下载整理.
特别说明:本帖不提供任何密钥或激活方法,请大家也不要在帖内回复或讨论涉及版权的相关内容,仅提供原版ISO下载链接 https://bbs.csdn.net/topics/391111024?list= ...
- 《Effective C++》资源管理:条款13-条款17
条款13:以对象管理资源 为了防止资源泄漏,请使用RAII(Resource Acquisition Is Initialization)对象,在构造函数里面获得资源,在析构函数里面释放资源 auto ...
- Angular 过滤器
<!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...
- vs2012密钥
Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC:KCW6-BPFPF-BT8C9-7DCT ...
- NIO服务器与客户端
这里客户端没有采用NIO形式 服务器: package com.util.Server.NIO; import javax.print.DocFlavor;import java.io.IOExcep ...