scanf()和getchar()在控制终端菜单
来源:互联网 发布:上市公司毛利率算法 编辑:程序博客网 时间:2024/06/01 07:19
笔者习惯于用getchar()处理控制终端菜单的选项操作,用scanf()处理用户的数值、字符串的输入操作。对于不同的操作,程序需要对输入进行验证,防止崩溃。
scanf()输入验证
1==scanf("%d",&x)//利用scanf()的返回值做类型的输入验证
while( 1==scanf("%d",&x) && x>0)//利用逻辑运算短路做类型和范围的输入验证{…}
while( 2==scanf("%d %d",&x,&y) && inLimit(x,y) )//inLimit是一个检测范围的函数,返回bool值{…}
getchar()输入验证
while( (ch=getchar())!='#' ) //同时完成赋值和输入验证,'#'为文本结束标志{…}
对多余字符进行清空缓冲区(如只需要读一行首字母
while( (ch=getchar())!='\n' ) continue;
或
scanf("%*s");//*修饰符抑制输入
错误处理
while( 1!=scanf("%d",&x) ){ //错误提示,重新输入}
或
while( (ch=getchar()) != '…'){ //错误提示,重新输入}
或
while((ch=getchar())!='…')//这里用作了结束判定{ switch(ch) { … default: //错误提示 continue; }}
简单的控制终端菜单思路
printf("…");//菜单的界面打印与输入提示while((ch=getchar())!='…')//这里是结束判定{ switch(ch)//处理选项 { case 'a': …; break; case 'b': …; break; case …: …; default: //错误提示 continue;//重新输入 } while( (ch=getchar())!='\n' ) continue;//处理后面的字符 printf("…");//菜单的界面打印与输入提示}
关于getchar()和scanf()
1.getchar()对缓冲区逐个读取,包括空白字符(空格、制表符、换行符等等),对字符的处理较为方便;scanf()从第一个非空白字符开始读取,直到下一个空白字符结束,不读取空白字符;所以在字符混合输入时,要小心换行符的处理。
2.getchar()的返回值是int,返回EOF可能不在char类型数值范围内,而int->char的自动类型转换采用截尾的方式,即对int取256的余数;
3.scanf(“%d,%d”,…)的第二个整型需要遇到‘,’字符才能开始开始读取,若找不到则跳过该整型的读取。
0 0
- scanf()和getchar()在控制终端菜单
- scanf()和getchar() 使用
- scanf()和getchar() 使用
- scanf()和getchar() 使用
- scanf和getchar
- scanf("%c")和getchar
- scanf()和getchar() 使用
- getchar和scanf
- gets 和 scanf 和 getchar
- getchar和scanf小注意
- scanf和getchar使用问题
- scanf和getchar的用法
- 对比scanf()、getchar()和gets()
- getchar和scanf的区别
- scanf()和getchar() 使用特点
- scanf getchar
- scanf,getchar
- getchar()scanf
- 常用命令行的一些小知识点
- 第三周项目3—求和集并集
- 非常全的Linux笔试题
- Android性能优化终结-内存篇
- Ubuntu15.10下mysql 5.6.28中文乱码问题
- scanf()和getchar()在控制终端菜单
- Activiti 学习笔记 小结
- Bootstrap_day1
- Lua初识(4)_判断语句
- Filtering JSON feeds from Spring 3's REST support using addMixInAnnotations
- Embedded Linux S3C2440 Environment Startup
- ssh查询分页(同页面的多个方法查询)的思路分析:
- 判断二叉树是不是平衡二叉树
- 如何在本地环境配置github