C项目实战:俄罗斯方块

图形

终端控制代码 (ANSI/VT100) 简介

终端 (控制) 代码是用来控制终端的特殊命令,它可以改变颜色和光标的位置,实现那些无法被程序本身完成的操作。

参考文章:终端控制代码 (ANSI/VT100) Terminal Codes 简介 (转载翻译)_终端代码-CSDN博客

#include <stdlib.h>
#include <stdio.h>int main()
{printf("\033[2J\033[1;1H\033[31;4mhello\n\033[0m");return 0;
}

输入设备

#include <stdlib.h>
#include <stdio.h>
#include <termios.h> int main()
{int ch;struct termios new; //用于去掉回显tcgetattr(0,&new);new.c_lflag =  new.c_lflag & ~(ICANON |ECHO);new.c_cc[VMIN] = 1; //接受最小长度new.c_cc[VTIME] = 0;//时间接受tcsetattr(0,TCSANOW,&new);while(1){ch = getchar();if(ch == 'Q')break;printf("%x ",ch);// 按照16进制进行输出,输入a,,十进制是97,十六进制输出65, A输出41 回车(LF)输出afflush(NULL);}return 0;
}

执行编译后的代码退出后,发现终端命令不显示,需要输入(reset命令)重启终端设备

#include <stdlib.h>
#include <stdio.h>
#include <termios.h> int main()
{int ch;struct termios new,old; //用于去掉回显tcgetattr(0,&new);tcgetattr(0,&old);new.c_lflag =  new.c_lflag & ~(ICANON |ECHO);new.c_cc[VMIN] = 1; //接受最小长度new.c_cc[VTIME] = 0;//时间接受tcsetattr(0,TCSANOW,&new);while(1){ch = getchar();if(ch == 'q')break;printf("%x ",ch);// 按照16进制进行输出,输入a,,十进制是97,十六进制输出65, A输出41 回车(LF)输出afflush(NULL);}printf("\n");tcsetattr(0,TCSANOW,&old);//恢复模式return 0;
}

并发

利用signal信号中的SIGALRM来实现

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>#include <signal.h>void int_handler(int code)
{printf("Get SIGINT\n");//code = 2printf("code = %d \n",code);//code = 2
}void alrm_handler(int code) //code显示对应的值,用kill -l命令查看
{alarm(1);// 每次收到alarm在调用信号printf("Get SIGALRM \n");//code = 14
}
int main()
{signal(SIGINT,int_handler);signal(SIGALRM,alrm_handler);alarm(1);//隔1秒发出SIGALRM信号while(1){int ch;ch = getchar();printf("ch = %x \n",ch);fflush(NULL);
//        printf("while(1)\n");
//        sleep(1);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdb文件名称被修改导致pdb文件加载失败的实战排查案例分享

目录 1、概述 2、问题说明 3、pdb文件加载失败的可能原因有哪些&#xff1f; 4、使用!sym noisy打开pdb加载详情&#xff0c;发现pdb文件名称确实被修改了 5、Windbg是如何知道要加载pdb文件名称的&#xff1f; C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表…

【html】如何给桌面设置渐变背景,通过HTML代码实现

录制的步骤 可以执行以下操作: 查看录制的步骤以幻灯片放映形式查看录制的步骤查看其他详细信息步骤 下一页 步 1: (‎2024/‎6/‎2 16:32:49) 用户在"项目视图 (列表)"上右键单击(在"G:\背景"中) 对于此步骤,没有保存任何屏幕截图。 上一个 下一页 步 …

linux进程加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后…

Java面试题:请对比synchronized和Lock接口,说明它们的优缺点和适用场景

synchronized关键字和java.util.concurrent.locks.Lock接口都是Java中用于实现线程同步的手段。它们在很多方面有相似之处&#xff0c;但也有一些关键的区别。以下是它们之间的对比&#xff1a; synchronized 优点&#xff1a; 使用简单&#xff1a;使用synchronized关键字可…

Spring Bean Request作用域:深入解析与实战洞察

1. 引言 在Spring框架中&#xff0c;Bean的作用域&#xff08;Scope&#xff09;定义了Bean的生命周期和可见性。其中&#xff0c;Request作用域是专为Web应用设计的&#xff0c;它在每个HTTP请求的生命周期内提供一个全新的Bean实例。理解Request作用域的工作机制及其背后的源…

翻译《The Old New Thing》- What a drag: Dragging a Uniform Resource Locator (URL)

What a drag: Dragging a Uniform Resource Locator (URL) - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080312-00/?p23133 Raymond Chen 2008年03月12日 麻烦的拖拽&#xff1a;拖拽统一资源定位符&#xff08;URL&#xff09; 简要 …

C++多态-联编

静态联编 静态联编支持的多态性&#xff0c;我们将其称为编译时的多态性&#xff0c;又称为静态的多态性&#xff0c;因为联编的过程是在程序开始执行之前进行的。在编译、连接的过程中&#xff0c;系统可以根据类型匹配等特征确定程序中调用与具体执行函数的关系&#xff0c;…

MySQL入门学习-查询进阶.分页查询

在 MySQL 中&#xff0c;分页查询是一种用于在查询结果中获取特定页面数据的技术。它通常用于处理大量数据的情况&#xff0c;以便将结果分为多个页面进行显示或处理。 以下是关于分页查询的一些关键概念和特点&#xff1a; 1. 分页查询的特点&#xff1a; - 数据量控制&…

识别同一用户

识别来自同一终端的访问技术 使用HTTP访问Web服务器时&#xff0c;会反复地执行页面的迁移和图像的读取等通信处理。而不同的通信都是使用不同的方式进行处理。因此服务器端就不需要对每个终端的状态进行单独的管理&#xff0c;可以降低服务器的负载。 另外&#xff0c;…

python安装phonopy教程

Phonopy 是一个用于计算材料晶格动力学性质的 Python 包。它可以用于计算声子频率、声子态密度、热力学性质等。 安装 Phonopy 步骤 1: 安装依赖项 首先,确保你已经安装了 Python 和 pip。然后,安装一些必要的依赖项: pip install numpy scipy matplotlibPhonopy 还依赖于…

AndroidStudio编译很慢问题解决

如果gradle同步、编译下载很慢&#xff0c;可以换一下仓库阿里云镜像 repositories {maven { url https://maven.aliyun.com/repository/google } maven { url https://maven.aliyun.com/repository/jcenter } maven { url https://maven.aliyun.com/repository/public } goog…

Java(十二)---认识异常

文章目录 前言1. 异常的概念与体系结构1.1.异常的概念1.异常的体系1.3 异常的分类 2. 异常的处理2.1 防御式编程2.2 异常的抛出2.3 异常的捕获2.3.1 异常声明throws2.3.2 try-catch捕获并处理2.3.3 finally 2.4 异常的处理流程 3. 自定义异常类 前言 这一篇就是咱们学习JavaSE…

让SDWebImage加载webp格式的图片

感谢大佬 iOS 加载webp格式的图片 pod "SDWebImage/WebP"报错的解决办法 - 简书 pod SDWebImageWebPCoder 导入文件&#xff1a; #import <SDWebImage/SDWebImage.h> #import <SDWebImageWebPCoder/SDWebImageWebPCoder.h> 实现&#xff1a;这个可以…

C++ : 模板初阶

标题&#xff1a;C : 模板初阶 水墨不写bug 正文开始&#xff1a; C语言的问题 &#xff1a; 写不完的swap函数 在学习C语言时&#xff0c;我们有一个经常使用的函数swap函数&#xff0c;它可以将两个对象的值交换。 我们通常这样实现它&#xff1a; void swap(int t1,int t…

【vue实战项目】通用管理系统:作业列表

目录 目录 1.前言 2.后端API 3.前端API 4.组件 5.分页 6.封装组件 1.前言 本文是博主前端Vue实战系列中的一篇文章&#xff0c;本系列将会带大家一起从0开始一步步完整的做完一个小项目&#xff0c;让你找到Vue实战的技巧和感觉。 专栏地址&#xff1a; https://blog…

300价值与300成长指数

300价值指数&#xff0c;看的是价值因子。价值因子包含四个变量:股息收益率&#xff0c;每股净资产与价格比率&#xff0c;每股净现金流与价格比率&#xff0c;每股收益与价格比率 根据这四个变量对沪深300指数的成份股进行打分&#xff0c;得分高的前100名&#xff0c;就纳入…

安卓Launcher启动详解

目录 一、概述1.1 核心源码1.2 主要代码作用 二、源码分析2.1 第一阶段SystemServer 启动HomeActivity的调用阶段2.2 [RootActivityContainer.java] startHomeOnDisplay()2.2.1 [ActivityTaskManagerService.java] getHomeIntent()2.2.2 [RootActivityContainer.java] resolveH…

uni-app解决表格uni-table样式问题

一、如何让表格文字只显示一行&#xff0c;超出部分用省略号表示 步骤 &#xff1a; 给table设置table-layout:fixed; 列宽由表格宽度和列宽度设定。&#xff08;默认是由单元格内容设定&#xff09;让表格元素继承父元素宽度固定table-layout: inherit;overflow: hidden;超过…

list的简单模拟实现

文章目录 目录 文章目录 前言 一、使用list时的注意事项 1.list不支持std库中的sort排序 2.去重操作 3.splice拼接 二、list的接口实现 1.源码中的节点 2.源码中的构造函数 3.哨兵位头节点 4.尾插和头插 5.迭代器* 5.1 迭代器中的operator和-- 5.2其他迭代器中的接口 5.3迭代器…

【气象常用】剖面图

效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;我用的era5的散度数据&#xff08;大家替换为自己的就好啦&#xff0c;era5数据下载方法可以看这里【数据下载】ERA5 各高度层月平均数据下载_era5月平均数据-CSDN博客&#xff09; 2. 数据处理&#xff1a…