一个无聊的自动提款机程序---改进版——限制用户,超时特征
2011-11-29 23:50
435 查看
/* * PLAY_AGAIN.C * 功能:实现组件2 * * 对用户显示提示问题 * 接受输入 * 如果是y,返回0 * 如果是n,返回1 * */ #include <stdio.h> #include <termios.h> #include <string.h> #include <fcntl.h> #define ASK "Do you want another transaction" /* 最大尝试次数*/ #define TRIES 7 /*每次尝试的时间*/ #define SLEEPTIME 1 /*警告用户*/ #define BEEP putchar('\a') int get_response(char *,int); int set_crmode(); int set_nodely(); int get_ok_char(); int tty_mode(int); /* * 这个版本的play_again改进的问题包括 * 关闭规范输入,使得程序能够在用户敲击键盘的同时得到输入的字符 * * 改进包括 忽略非法键 * * 设置超时特征 * */ int main(){ int response; //保存tty的mode tty_mode(0); //设置tty的mode set_crmode(); //关闭阻塞 set_nodelay(); //获得回答 response = get_response(ASK,TRIES); printf("\nresponse = %d\n",response); //恢复tty的mode tty_mode(1); return response; } int get_response(char *question,int maxtries){ printf("%s(y/n)?",question); int input; fflush(stdout); while(1){ sleep(SLEEPTIME); input = getchar(); if((input == 'y')||(input == 'Y')) return 0; if((input == 'n')||(input == 'N')) return 1; if(maxtries-- == 0) return 2; BEEP; } //循环读取用户的输入,指导用户输入ynYN /* switch(input=getchar()){ case 'y': case 'Y':return 0; case 'n': case 'N': case EOF:return 1; // default: //printf("\ncan not understand %c,",input); //printf("Please type y or n \n"); * * 当输入sure,没有显示任何内容,他会忽略错误信息 * * */ } get_ok_char(){ int c; while((c=getchar())!=EOF&&strchr("yYnN",c)==NULL); return c; } set_nodelay(){ int termflags; termflags = fcntl(0,F_GETFL); termflags |= O_NDELAY; fcntl(0,F_SETFL,termflags); } set_crmode(){ struct termios ttystate; //读取当前的终端驱动属性 tcgetattr(0,&ttystate); //修改配置 //关闭缓冲 ttystate.c_lflag &= ~ICANON; //关闭回显 ttystate.c_lflag &= ~ECHO; //保证一次仅获得一个字符 ttystate.c_cc[VMIN] == 1; //保存修改 tcsetattr(0,TCSANOW,&ttystate); } tty_mode(int how){ static struct termios original_mode; static int original_flags; if(how == 0){ tcgetattr(0,&original_mode); original_flags = fcntl(0,F_GETFL); }else{ tcsetattr(0,TCSANOW,&original_mode); fcntl(0,F_SETFL,original_flags); } }
相关文章推荐
- 一个无聊的自动提款机程序---改进版--忽略非法输入
- 一个无聊的自动提款机程序---改进版--修改终端属性
- 一个无聊的自动提款机程序---最终版——进行信号的处理
- 一个无聊的自动提款机程序
- openfire修改程序,使得在同一个分组里的用户,自动和该组admin互为好友
- 编写一个jsp程序,实现用户登录,当用户输入的用户或密码错误时,将页面重定向到错误提示页,并在该页面显示30秒后 自动回到用户登录界面
- Java设置session超时(失效)的时间 在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session 具体设置的方法有三种:
- 懒人部署插件实现智能、可视化更新程序,让用户不用一个文件一个文件的拷贝,有效防止少、漏更新,同时实现自动备份覆盖的文件,便于随时还原
- 分享一个Flex管理系统 Session超时的时候 用户操作时自动提示并跳转到登陆页面的方法
- 分享一个Flex管理系统 Session超时的时候 用户操作时自动提示并跳转到登陆页面的方法
- 记一次登录程序的改进过程(改进记住密码功能、提高用户交互)
- 如何把Domino所有用户接收和发送的邮件都自动地拷贝到一个数据库中
- 写了一个能自定义并自动按照规则生成单据号码的程序及相关存储过程和表,及示范,附全部源代码!
- 用程序来控制一个网页,实现自动输入等操作
- 写一个登陆和注册用户的程序
- 一个播客(podcast)展示对用户程序的攻击
- 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序
- 20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程
- VC 实现当拖动一个文件到程序的图标上时,程序自动启动并打开该文件
- fedora20添加开机自动启动程序和添加sudo用户