这是书上的一个例题..俺只是照抄拿来编译, 俺是刚刚才学编程的.... 模块功能:限制在输入整数和浮点数时只能输入合法的数字、正负号、小数点,其余的字符忽略。 /*自定义头文件*/ getnum.h ********************************** extern unsigned int getnumError; /*声明外部变量*/
int GetInt(void);
long GetLong(void);
float GetFloat(void);
double GetDouble(void); *************************************** getnum.c ************************************** #include "getnum.h" #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <ctype.h>
#define BUFFER_SIZE 32 /*输入缓冲区大小*/
enum input_type{FLOAT,INT}inputType; /*输入类型*/ unsigned int getnumError=0; /*非0表示出错*/ static unsigned char buffer[BUFFER_SIZE]; /*输入缓冲区*/ static unsigned int pos=0; /*buffer中有效数据的末尾位置+1*/
static unsigned char *GetInput(void); static int IsValidChar(char ch); static int HasDot(void);
/* 函数功能:读取用户的int类型输入 入口:无 返回值:用户输入结果 */ int GetInt(void) { return (int)GetLong(); }
/* 函数功能:读取用户的long类型输入 入口:无 返回值:用户输入结果 */ long GetLong(void) { inputType=INT; return atol(GetInput()); }
/* 函数功能:读取用户的float类型输入 入口:无 返回值:用户输入结果 */ float GetFloat(void) { return (float)GetDouble(); }
/* 函数功能:读取用户的double类型输入 入口:无 返回值:用户输入结果 */ double GetDouble(void) { inputType=FLOAT; return atof(GetInput()); }
/* 函数功能:读取用户输入的字符串,限制必须时整数或者浮点数 入口:无 返回值:数据缓冲区 */ static unsined char* GetInput(void) { char c='\0'; pos=0;
while((c=getch())!='\r') /*回车输入结束*/ { if(c=='\b') /*输入退格符*/ { if(pos>0) { pos--; printf("\b\b"); /*删除前一个字符*/ } else { putchar('\a'); /*提示没有字符可删除*/ }
} else if(pos<(BUFFER_SIZE-1)) /*防止越界and为'\0'预留空间*/ { if(IsValidChar(c)) /*合法字符保存并回显*/ { buffer[pos++]=c; putchar(c); } else { putchar('\a'); /*提示输入非法字符*/ }
} else /*提示达到buffer上界*/ { putchar('\a'); } }
buffer[pos]='\0'; putchar('\a');
if(pos>0) { getnumError=0; } else { getnumError=1; /*用户什么都没输入*/ }
return buffer;
}
/* 函数功能:判断当前输入是否合法 入口:无 返回值:非0表示合法,0表示非法 */ static int IsValidChar(char ch) { int result;
if(ch>='0'&&ch<='9')
result=1;
else if(ch==0&&(ch=='-'||ch=='+'))
result=1;
else if(ch=='.'&&inputType==FLOAT&&(HasDot))
result=1;
else
result=0;
return result;
}
/* 函数功能:判断是否输入了小数点 入口:无 返回值:非0表示已经输入,0表示未输入 */ static in HasDot(void) { int i; for(i=0;i<pos&&buffer[i]=='.';i++)
;
return (i<pos);
} *********************************** main.c *********************************** #include "getnum.h"
main() { double f;
do {
printf("Input a number:"); f=GetDouble(); if(getnumError!=0)
printf("You input nothing.\n");
else
printf("What you input is %lf.\n",f);
}while(f!=-1);
} ***************************************
[此贴子已经被作者于2005-9-12 20:03:40编辑过]