home *** CD-ROM | disk | FTP | other *** search
-
- G. M. HOOVER
- COMPUSERVE I.D. - 71230,537
-
-
-
-
- ......NUMBER.TXT REVISITED.....
-
-
- 2NUMBR.TXT (A MORE "precision based" RESOLUTION)
-
-
-
-
- THE FOLLOWING CODE WAS PROVIDED ME BY A GENTLEMAN NAMED JOHN M. BILYJ,
-
- ALSO OF COMPUSERVE WHO POINTED OUT SEVERAL ASPECTS OF "NUMBER.TXT" WHICH WERE
-
- NOT UP TO PAR, ON SEVERAL ASPECTS OF THEIR USAGE.
-
-
-
- THE MAJOR ASPECT OF "xnge" HAS TO DO WITH MODIFYING THE "getfloat"
-
- FUNCTION WITH "double". ALTHOUGH I'D READ THAT DOUBLE WAS MORE ACCURATE
-
- THAN THE FLOAT FUNCTION, THE FOLLOWING "coding" VALIDATES THIS SUPPOSITION.
-
-
- WHEN INPUTTING 123456789.00 WITH "NUMBER.TXT CODING", IT RETURNS SOMETHING
-
- LIKE "123456792.00". THE FOLLOWING CODE ASSISTS WITH ALLEVIATING THAT,
-
- INCORPORATES "backspacing" TO RESOLVE AN ERROR, AND ALSO DISCONTINUES INPUT
-
- TO GO PAST THE END OF THE ARRAY.
-
-
-
- #include <stdio.h>
- #include <math.h>
- #include <ctype.h>
- #define MAXDIGITS 15
- #define TRUE (1==1)
- #define FALSE (1==0)
- #define END_OF_STRING '\0'
- double GetNum(void);
-
- void main ()
- {
- double rate;
-
- printf("please enter the amount of rate for month\n");
- rate = GetNum();
-
- printf("rate is %.2f", rate);
- return;
- }
-
- double GetNum(void)
- {
- char buf[MAXDIGITS+1];
- int fdecimal = FALSE;
- int ch;
- int i=0;
-
- while((ch=getch())!='\r') {
- if(ch==0x08 && i>0) {
- // process a backspace key
- putch(0x08) ; putch(0x20) ; putch(0x08) ;
- if(buf[i-1]=='.')
- fdecimal=FALSE ;
- buf[i]=0x00 ;
- i-- ;
- continue ;
- }
- if(!isdigit(ch))
- if((fdecimal==TRUE) || (ch!='.'))
- continue;
-
- buf[i]=ch;
- i++;
- putch(ch);
- if(ch == '.')
- fdecimal = TRUE;
- if((fdecimal)?(i>MAXDIGITS+1):(i>MAXDIGITS)) {
- putch(0x08) ; putch(0x20) ; putch(0x08) ;
- i-- ;
- }
- }
- buf[i] = END_OF_STRING;
- putch('\r');
- putch('\n');
- return(atof(buf));
- }
-
-
-
-
- BEST REGARDS,
-
- GARY