尴尬日常
2020年6月15日 物联网实训中
哇哈,实训的第一天,按照惯例又是非常水的一天(老师又从C语言入门开始了),然鹅,这又是翻车的一天。
刚开始get了两个小知识
extern关键字和枚举实现bool类型
// game001.c
#include <termios.h>
#include <unistd.h>
/***
* Linux 无回显和缓存输入
***/
char mygetch()
{
struct termios oldt, newt;
char ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
//game003.c
extern char mygetch();
typedef enum{false,true} bool;
通过extern关键字可以使用其他.c文件中的变量和函数(函数加不加一样,据说全局函数自带extern声明),听说在编译大型程序的时候能比直接引用头文件要快一些。
枚举类型可以在c中加入bool类型,对于习惯c++的人来说还是不错的选择,也有利于后期修改。
无回显和缓存输入是这次实训比较有价值的一个收获(好长时间没写黑窗口程序了)。
老师的作业也挺简单,判断空格继续,esc退出,其他键不响应,于是乎……我很快就写完了,然后截了个大大的图第一个交上去,老师回了个666,然后我竟然还又发给了好几个同学,然后竟然没人说出错了……
bool restart(void)
{
while(1)
{
if(27 == mygetch()) //esc
{
return false;
}
if(32 == mygetch()) //空格
{
return true;
}
}
}
while(1)
{
do_game();
if(!restart())
{
break;
}
}
哎,晚上看到这个代码真是想撤回,以后绝对要仔细再仔细。