- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C返回非整型值的函数
C 返回非整型值的函数
到目前为止,我们所讨论的函数都是不返回任何值(void)或只返回int类型值的函数。
假如某个函数必须返回其它类型的值,该怎么办呢?许多数值函数(如sqrt、sin 与cos
等函数)返回的是double 类型的值,某些专用函数则返回其它类型的值。我们通过函数
atof(s)来说明函数返回非整型值的方法。该函数把字符串s 转换为相应的双精度浮点数。
atof 函数是atoi 函数的扩展,第2 章与第3 章已讨论了atoi 函数的几___________个版本。atof 函
数需要处理可选的符号和小数点,并要考虑可能缺少整数部分或小数部分的情况。我们这里
编写的版本并不是一个高质量的输入转换函数,它占用了过多的空间。标准库中包含类似功
能的atof函数,在头文件stdlib.h中声明。
首先,由于atof函数的返回值类型不是int,因此该函数必须声明返回值的类型。返回
值的类型名应放在函数名字之前,如下所示:
#include ctype.h
/* atof: convert string s to double */
double atof(char s[])
{
double val, power;
int i, sign;
for (i = 0; isspace(s[i]); i++) /* skip white space */
;
sign = (s[i] == -) ? -1 : 1;
if (s[i] == + || s[i] == -)
i++;
for (val = 0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - 0);
if (s[i] == .)
i++;
for (power = 1.0; isdigit(s[i]); i++) {
val = 10.0 * val + (s[i] - 0);
power *= 10;
}
return sign * val / power;
}
其次,调用函数必须知道atof函数返回的是非整型值,这一点也是很重要的。为了达到
该目的,一种方法是在调用函数中显式声明atof函数。下面所示的基本计算器程序(仅适用
于支票簿计算)中有类似的声明。该程序在每行中读取一个数(数的前面可能有正负号),并
对它们求和,在每次输入完成后把这些数的累计总和打印出来:
#include stdio.h
#define MAXLINE 100
/* rudimentary calculator */
main()
{
double sum, atof(char []);
char line[MAXLINE];
int getline(char line[], int max);
sum = 0;
while (getline(line, MAXLINE) 0)
printf(\t%g\n, sum += atof(line));
return 0;
}
其中,声明语句
double sum, atof(char []);
表明sum 是一个double 类型的变量,atof 函数带有个char[]类型的参数,且返回一个
double类型的值。
函数 atof的声明与定义必须一致。如果atof函数与调用它的主函数main放在同一源
文件中,并且类型不一致,编译器就会检测到该错误。但是,如果atof函数是单独编译的(这
种可能性更大),这种不匹配的错误就无法检测出来,atof 函数将返回double 类型的值,
而main函数却将返回值按照int类型处理,最后的结果值毫无意义。
根据前面有关函数的声明如何与定义保持一致的讨论,发生不匹配现象似乎很令人吃惊。
其中的一个原因是,如果没有函数原型,则函数将在第一次出现的表达式中被隐式声明,例
如:
sum += atof(line)
如果先前没有声明过的一个名字出现在某个表达式中,并且其后紧跟一个左圆括号,那么上
下文就会认为该名字是一个函数名字,该函数的返回值将被假定为int 类型,但上下文并不
对其参数作任何假设。并且,如果函数声明中不包含参数,例如:
double atof();
那么编译程序也不会对函数atof的参数作任何假设,并会关闭所有的参数检查。对空参数表
的这种特殊处理是为了使新的编译器能编译比较老的C 语言程序。不过,在新编写的程序中
这么做是不提倡的。如果函数带有参数,则要声明它们;如果没有参数,则使用void进行声
明。
在正确进行声明的函数atof的基础上,我们可以利用它编写出函数atoi(将字符串转
换为int类型):
/* atoi: convert string s to integer using atof */
int atoi(ch
您可能关注的文档
最近下载
- 《安全生产基础知识》课件(上).pptx VIP
- GB/T 10125-2021人造气氛腐蚀试验盐雾试验.docx VIP
- 07SD101-8电力电缆井设计与安装(高清完整版).docx VIP
- 手机监控 客户端Myeye.pdf VIP
- QJGAC+1523.028-2019+电子电气零部件环境适应性及可靠性通用试验规范.pdf VIP
- 小品剧本网,提供校园各小品剧本,元旦春晚小品剧本,年会小品剧本.doc VIP
- 数据可视化大屏培训课件.pptx VIP
- 2024年郑州农业发展集团有限公司社会招聘工作人员笔试考点考试题库及答案.docx VIP
- 植被恢复工程建设项目施工组织设计(技术标).pdf VIP
- 顿汉布什磁悬浮变频离心(热泵)DCLCM-R.pdf VIP
原创力文档


文档评论(0)