免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: liuyanghr
打印 上一主题 下一主题

[函数] 求救,简单的函数使用 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-02-28 15:56 |只看该作者

求救,简单的函数使用

#include <stdio.h>;
void main()
{
char szStr1[4];

strcpy(szStr1, "222";
printf("szStr1 = %f\n",(float)(atoi(szStr1)));
}
这样是可以的
ohmylove 该用户已被删除
12 [报告]
发表于 2003-02-28 15:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
13 [报告]
发表于 2003-02-28 16:09 |只看该作者

求救,简单的函数使用

原帖由 "sinnu" 发表:
trcpy(szStr1, "222";
printf("szStr1 = %f\n",(float)(atoi(szStr1)));
}
这样是可以的


那如果是2.2的话就变成了2.0了阿

论坛徽章:
0
14 [报告]
发表于 2003-03-03 12:31 |只看该作者

求救,简单的函数使用

头文件好使

论坛徽章:
0
15 [报告]
发表于 2003-03-04 12:52 |只看该作者

求救,简单的函数使用

这个和printf()的格式化有关,看我的试验:
#include <stdio.h>;
#include <stdlib.h>;

void main()
{
        char szStr1[4];
        double d;
        float f;
        int i;

        strcpy(szStr1, "222";
        printf("szStr1 = %s\r\n", szStr1);
        i = atoi(szStr1);
        f = (float)atof(szStr1);
        d = atof(szStr1);
        printf("szStr1 = %d, %f, %f\r\n", i, f , d);
}

输出:
$ aa
szStr1 = 222
szStr1 = 222, 222.000000, 222.000000   
但如果使用你的程序输出就是
szStr1 = 0.000000
我用的是SCO UNIX。
我想大概在不同的系统上有不同的解释,与printf的实现有关系

论坛徽章:
0
16 [报告]
发表于 2003-03-04 13:24 |只看该作者

求救,简单的函数使用

和c编译器有关
由于你未包含stdlib.h,因此c编译器把atof的返回值定义为 int
相当于 int  atof(char *)
导致结果错误
如果包含stdlib.h
编译器可知道atof的原型为
double  atof(const char *);
结果正确。
如果采用C++编译,由于C++的类型检查比较严格,你的程序会编译失败,但不会运行出错。

论坛徽章:
0
17 [报告]
发表于 2003-03-04 19:59 |只看该作者

求救,简单的函数使用

谢谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP