Chinaunix

标题: 求救,简单的函数使用 [打印本页]

作者: liuyanghr    时间: 2003-02-28 14:29
标题: 求救,简单的函数使用
#include <stdio.h>;
void main()
{
    char szStr1[4];

    strcpy(szStr1, "222";
    printf("szStr1 = %f\n", atof(szStr1))
}

结果:szStr1 = -3313906912442838626541985956750000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00.000000

为什么打印出来的不对呢?
作者: liangtf    时间: 2003-02-28 14:35
标题: 求救,简单的函数使用
不应该啊。。。
作者: channelV    时间: 2003-02-28 14:40
标题: 求救,简单的函数使用
先printf字符串看看什么内容
作者: menp9999    时间: 2003-02-28 14:44
标题: 求救,简单的函数使用
改成这样呢?
strcpy(&amp;szStr1, "222";
作者: unicorns    时间: 2003-02-28 14:51
标题: 求救,简单的函数使用
用sscanf(szStr1, "%f", &amp;i);
试试
好像看到过说atof有问题
作者: liuyanghr    时间: 2003-02-28 15:15
标题: 求救,简单的函数使用
#include <stdio.h>;
void main()
{
char szStr1[4];
double dStr1;
     
    strcpy(szStr1, "2.2";
    dStr1 = 0.00;
    sscanf(szStr1, "%f", &amp;dStr1);

    printf("szStr1 = %s\ndStr1 = %13.2f\n", szStr1, dStr1);
}

结果是:
szStr1 = 2.2
dStr1 =          3.60

为什么?
作者: liangtf    时间: 2003-02-28 15:18
标题: 求救,简单的函数使用
什么系统?
作者: ohmylove    时间: 2003-02-28 15:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: HopeCao    时间: 2003-02-28 15:34
标题: 求救,简单的函数使用
这样:

  1. #include <stdio.h>;
  2. #include <stdlib.h>;

  3. void main()
  4. {
  5.         char szStr1[4];

  6.         strcpy(szStr1, "2.2");

  7.         printf("szStr1 = %s\ndStr1 = %.12f\n", szStr1, atof(szStr1));
  8. }
复制代码


好象能输出,但是总觉得不对劲!
作者: unicorns    时间: 2003-02-28 15:51
标题: 求救,简单的函数使用
我也搞不懂这个问题
atof()在加了头文件后就可以了
但是sscanf为什么不可以用阿
会不会是数据类型的问题
把dStr1换成float试一下
作者: sinnu    时间: 2003-02-28 15:56
标题: 求救,简单的函数使用
#include <stdio.h>;
void main()
{
char szStr1[4];

strcpy(szStr1, "222";
printf("szStr1 = %f\n",(float)(atoi(szStr1)));
}
这样是可以的
作者: ohmylove    时间: 2003-02-28 15:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: unicorns    时间: 2003-02-28 16:09
标题: 求救,简单的函数使用
原帖由 "sinnu" 发表:
trcpy(szStr1, "222";
printf("szStr1 = %f\n",(float)(atoi(szStr1)));
}
这样是可以的


那如果是2.2的话就变成了2.0了阿
作者: liuyanghr    时间: 2003-03-03 12:31
标题: 求救,简单的函数使用
头文件好使
作者: 雷斯林    时间: 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的实现有关系
作者: mengwg    时间: 2003-03-04 13:24
标题: 求救,简单的函数使用
和c编译器有关
由于你未包含stdlib.h,因此c编译器把atof的返回值定义为 int
相当于 int  atof(char *)
导致结果错误
如果包含stdlib.h
编译器可知道atof的原型为
double  atof(const char *);
结果正确。
如果采用C++编译,由于C++的类型检查比较严格,你的程序会编译失败,但不会运行出错。
作者: liuyanghr    时间: 2003-03-04 19:59
标题: 求救,简单的函数使用
谢谢各位




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2