|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写自定义整数输入函数
函数原型为:int inputInt(int min, int max);
说明:入参min和max分别表示该函数输出的最小和最大值。
功能基本要求:
在windows操作系统下,使用codeblocks做为开发工具。函数实现过程中,只能使用getch()做为键盘的输入,不得使用scanf、gets之类的系统函数。以回车键结束输入,对于不符合要求的输入提供合理的解决方法,支持退格键,支持16进制输入(以0x或0X开始,16进制支持a-f和A-F),对于10进制方式的输入,不能以0开始输入。
调用示例:
int x;
x = inputInt(1, 500);
输入示例:
输入“123<回车>”,则函数返回整数123
输入“0x123<回车>”,则函数返回整数291
本帖最后由 jackz007 于 2019-12-4 01:46 编辑
- #include <stdio.h>
- #include <conio.h>
- inputInt(void)
- {
- char c , s[82] ;
- int a , d , e , k , m ;
- bool f ;
- for(m = 0 ; (c = getch()) != 0x0d && m < 81 ;) {
- if(c == 8) {
- if (m) {
- printf("\b \b") ;
- s[m - 1] = 0x00 ;
- m -- ;
- }
- } else {
- s[m ++] = c ;
- printf("%c" , c) ;
- }
- }
- printf("\n") ;
- for(; (s[m - 1] == 0x09 || s[m - 1] == 0x20) && m > 0 ; s[m -- - 1] = 0) ;
- for(e = 0 ; (s[e] == 0x09 || s[e] == 0x20) && e < m ; e ++) ;
- for(k = e ; k < m + 1 ; k ++) s[k - e] = s[k] ;
- m -= e ;
- e = 0 ;
- if(m > 0) {
- if(m > 1 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) {
- if(m > 2) {
- for(f = true , k = 2 ; k < m && f ; k ++) {
- if(s[k] >= '0' && s[k] <= '9') d = s[k] - '0' ;
- else if(s[k] >= 'a' && s[k] <= 'f') d = 10 + s[k] - 'a' ;
- else if(s[k] >= 'A' && s[k] <= 'F') d = 10 + s[k] - 'A' ;
- else f = false ;
- if(f) e = e * 16 + d ;
- }
- if(! f) e = 0 ;
- }
- } else {
- a = 0 ;
- if(s[a] == '-') a ++ ;
- if(m > a) {
- if(s[a] != '0') {
- for(f = true , k = a ; k < m && f ; k ++) {
- if(s[k] >= '0' && s[k] <= '9') d = s[k] - '0' ;
- else f = false ;
- if(f) e = e * 10 + d ;
- }
- if(! f) e = 0 ;
- else if(a) e = -e ;
- }
- }
- }
- }
- return e ;
- }
- main(void)
- {
- int d ;
- d = inputInt() ;
- printf("%d\n" , d) ;
- }
复制代码
编译运行实况:
- C:\Bin>g++ -static -o getint getint.c
- C:\Bin>getint
- 0x123
- 291
- C:\Bin>getint
- 123
- 123
- C:\Bin>
复制代码
inputInt() 可以自动去掉输入数字过程中输入的前导以及尾随的空格及 TAB 字符。
|
|