源自《Linux程序设计第四版》
读过了书籍不是真的学会,自己码出来才能看到自己掌握了多少。
用了2天时间才将这段小程序码出来,对于基础不是很好的我来说,还是非常开心。
#include <stdio.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
int main(){
int c_in; //保存输入的选项
//声明一个字符串数组,用来保存菜单选项
char *option[]={
"a.add a element",
"d.delete a element",
"q.quit",
NULL
};
struct termios settings_init,settings_new;
//判断是不是输出到文件中了,禁止重导向
if(!isatty(fileno(stdout))){
fprintf(stderr,"It's not a tty!");
return 1;
}
tcgetattr(fileno(stdin),&settings_init);//取得终端配置信息
settings_new = settings_init;
settings_new.c_lflag &= ~ECHO;//关闭回显
settings_new.c_lflag &= ~ICANON;//非规范模式
settings_new.c_cc[VMIN] = 1;
settings_new.c_cc[VTIME]= 0;
settings_new.c_lflag &= ~ISIG;
tcsetattr(fileno(stdin),TCSANOW,&settings_new);//将新的配置信息保存
while(1){
char closen = 0;
//在控制台打印出菜单
char **ptr = option;
while(*ptr){
printf("%s\n",*ptr);
ptr++;
}
//从键盘获取一个字符输入
do{
c_in = getc(stdin);
}while(c_in == '\n');
if(c_in == 'q'){
tcsetattr(fileno(stdin),TCSANOW,&settings_init);//将配置信息复原
return 0;
}
ptr = option;
while(*ptr){
if(**ptr == c_in ){
closen = 1;
printf("您的选择是:%c\n",c_in);
break;
}
ptr++;
}
if(!closen){
printf("您输入的不正确!\n");
}
}
}
展示一下效果:
键入的是a、b、d、q。
键入的时候不需要按回车,因为是非规范模式,自动就获取了。而且键入的字符不会回显哦!!