ATOF()是C语言中的内部函数。
语法: result=atof (string)
参数: string是指向浮点数字符串的指针;
返回值: 结果是一个32位的浮点指针数.
功能: 将符合要求的那一串文字转换成浮点表示方式.结果不能表示,则行为没有定义.
有效性: 适合所有设备.
要求: #include<stdlib.h>
例子: char string[10];
float x;
strcpy(string,”123.456”); //将”123.456”拷贝到string数组
x=atof(string); //x现在是123.456
例子文件: ex_tank.c
文件ex_tank.c如下:
This example uses a trig function to calculate the volume of
a fluid in a tank. The tank is in the shape of a large
propane tank. The ends are half of an ellipsoid and the
main body part is a horizontal cylinder.
#if defined(__PCM__) //若使用了PCM编译器,则defined( __PCM__)返回值为1
#include <16F877.h> //包含16F877.h头文件
#fuses HS, NOWDT, NOPROTECT, NOLVP //HS:高速晶振/谐振器, NOWDT:不使用WDT
// NOPROTECT:程序存储器代码不保护
#use delay(clock=20000000) //使能内置函数的功能:delay_ms()和delay_us()
//#USE DELAY()必须在#use rs232()使用之前出现.
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
//使用波特率为9600,
//发送脚为PIN_ C6
//接收脚为PIN_ C7
//使能内置函数:GETC,PUTC和PRINTF, kbhit();
#elif defined(__PCH__) //若使用了PCH编译器,则defined( __PCH__)返回值为1
#include <18F452.h> //包含18F452.h头文件
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#endif //结束if定义
#include <math.h> //包含math.h头文件
#include <input.c> //包含input.c头文件
#include <stdlib.h> //包含stdlib.h头文件
#define NUM_LENGTH 8 //用NUM_LENGTH代替8
main() {
float volume, cap_vol, tube_vol, diameter, length=1, cap_length,
height, offset_height, tube_length, temp1; //声明浮点型变量
char string[NUM_LENGTH]; //声明数组string[]
short error=FALSE; //声明error为位变量,并赋初值
while(TRUE)
{
do {
if(error)
printf("\r\nERROR MADE, PLEASE ENTER VALID NUMBERS!!");
printf("\r\n\n***NOTE: ALL DIMENSIONS ARE IN METERS***\r\n");
printf( "Enter dimensions of tank...
\r\n Overall length: ");
get_string(string, NUM_LENGTH);
length = atof(string); //将符合要求的那一串文字转换成浮点表示方式
printf( "\r\n Cap length: ");
get_string(string, NUM_LENGTH);
cap_length = atof(string); //将符合要求的那一串文字转换成浮点表示方式
printf( "\r\n Diameter of tank: "); //通过RS232送出”桶的直径”
get_string(string, NUM_LENGTH); //通过RS232读”桶的直径”
diameter = atof(string); //将符合要求的那一串文字转换成浮点表示方式
printf("\r\n\nEnter the height of the fluid: "); //通过RS232送出”液体的高度”
get_string(string, NUM_LENGTH); //通过RS232读”液体的高度”
height = atof(string); //将符合要求的那一串文字转换成浮点表示方式
tube_length = length - 2*cap_length;
if(height>diameter||length<=0||cap_length<0||height<0||tube_length<0)
error = TRUE;
else
error = FALSE;
}
while(error);
offset_height = height - diameter/2;
temp1 = pwr(offset_height,3) - 3*diameter*diameter*offset_height/4
- pwr(diameter,3)/4;
cap_vol = -PI*cap_length*temp1/(3*diameter);
temp1 = sqrt(diameter*diameter/4-offset_height*offset_height);
temp1 = PI/2 + 4*offset_height*temp1/(diameter*diameter)
+ asin(2*offset_height/diameter);
tube_vol = tube_length*diameter*diameter*temp1/4;
volume = tube_vol + 2*cap_vol;
printf("\r\n\nTotal volume of water is: %f gallons\n\n", volume*264.2);
}
}
文件: input.c如下:
#include <CTYPE.H> //包含CTYPE.H头文件
BYTE gethex1() {
char digit; //声明字节型变量digit
digit = getc(); //从RS232口读一个字节
putc(digit); //向RS232口写一个字节
if(digit<='9') //将读到的字节以16进制返回
return(digit-'0'); //若读到的ascii码小于或等于39,则将其减30,以16进制返回
else
return((toupper(digit)-'A')+10); //若读到的ascii码大于39,则将其减41,再加10返回
}
BYTE gethex() {
int lo, hi; //声明整型变量lo, hi
hi = gethex1(); //从RS232口读一个字节,存储到hi中
lo = gethex1(); //从RS232口读一个字节,存储到lo中
if(lo==0xdd)
return(hi);
else
return( hi*16+lo );
}
void get_string(char* s, int max) {
int len; //声明整型变量len
char c; //声明字节型变量c
--max; //初始化max值
len=0; //初始化len值
do {
c=getc(); //从RS232口读一个字节,存储到c中
if(c==8) { // Backspace若是空格键
if(len>0) {
len--;
putc(c); //向RS232写c
putc(' ');
putc(c);
}
} else if ((c>=' ')&&(c<='~'))
if(len<max) {
s[len++]=c;
putc(c);
}
} while(c!=13);
s[len]=0;
}
// stdlib.h is required for the ato_ conversions
// in the following functions
#ifdef _STDLIB //若定义_STDLIB,则执行下面
signed int get_int() {
char s[5]; //声明字符型数组s[5]
signed int i; //声明有符号整型变量i
get_string(s, 5); //从RS232口读5个字节,存储到s数组中
i=atoi(s); //将数组s[]的字符串转换成整型数送给i
return(i);
}
signed long get_long() {
char s[7]; //声明字符型数组s[7]
signed long l; //声明有符号长整型变量l
get_string(s, 7); //从RS232口读7个字节,存储到s数组中
l=atol(s); //将数组s[]的字符串转换成长整型数送给l
return(l);
}
float get_float() {
char s[20]; //声明字符型数组s[7]
float f; //声明符点型变量f
get_string(s, 20); //从RS232口读20个字节,存储到s数组中
f = atof(s); //将数组s[]的字符串转换成符点数送给f
return(f);
}
#endif //结束if定义