getch()
getch() 在Linux上不能用, 最开始采用的替换方式是用
initscr(); // getch()使用前的初始化
endwin(); // getch()使用后的注销
但是发现有问题, 后采用
#include <termios.h>
int getch(void) {
struct termios tm, tm_old;
int fd = STDIN_FILENO, c;
if (tcgetattr(fd, &tm) < 0)
return -1;
tm_old = tm;
cfmakeraw(&tm);
if (tcsetattr(fd, TCSANOW, &tm) < 0)
return -1;
c = fgetc(stdin);
if (tcsetattr(fd, TCSANOW, &tm_old) < 0)
return -1;
if (c == 3)
exit(1);
//按Ctrl+C结束退出
return c;
}
清屏问题
system(“clear”) 有问题,
显示环境变量没有设置, 但clear是环境变量
所以改用 puts("\033[2J");
ANSI/VT100 Terminal Control Escape Sequences ANSI控制码
printf不立即显示的问题:
- printf行缓冲的概念以及刷新缓冲区的条件
- 什么是行缓冲?
- 当输入输出遇到换行符的这类缓冲定义为行缓冲。标准输入和标准输出都是行缓冲。stderr无缓冲,不用经过fflush或exit,就直接打印出来
- 引入缓冲区的目的是什么?
- 操作系统为减少 IO操作 所以设置了缓冲区. 等缓冲区满了再去操作IO. 这样是为了提高效率.减少CUP等待IO而浪费CPU资源。
- 缓冲区刷新的条件:
1.进程结束。
2.遇到\n。\n具备刷新缓冲区的作用
3.缓冲区满。printf函数的缓冲区大小为1024个字节,当超出缓冲区的大小,缓冲区会被刷新。
4.手动刷新缓冲区fflush(stdout)。