C:strtof返回0.000,怎么了?

时间:2015-03-22 13:08:21

标签: c

我在使用这部分C代码时遇到了一些麻烦。一切都应该工作得很好,除了函数“strtof”,它返回0.000而不是浮点数。

代码应该做什么: 读一行,例如“一个12” 如果第一个字符是“a”,则使用strtof,它应该设置指向下一个空格的指针,并将两个空格之间的值保存为x ...(可能是错误的)

(包含所有库并定义MAX_LINE。)

感谢您的回答:)。

int run(void) {

    char line[MAX_LINE];
    fgets(line, sizeof(line), stdin);          

    char * ptr;
    ptr = strtok (line," ");                

    if (strcmp(ptr, "a") == 0){
        {
            float x;

            x = strtof(line, &ptr);          /*HERE*/
            printf("%f", x);
        }
    }

    return 0;
}

3 个答案:

答案 0 :(得分:2)

你不会在" a"之后读取浮动值,我认为你需要这样做:

ptr = strtok(NULL," ");
x = strtof(ptr, NULL);

strtok的下一个电话会读取" 12"并且strtof会将它转换为浮点数到x变量。

答案 1 :(得分:1)

你已经指出了:

  

代码应该做什么:读一行,例如" 12"如果第一个字符是" a",则使用strtof,它应该设置指向下一个空格的指针并将两个空格之间的值保存到x ...(可能是错误的)

来自glibc manual(strtod和strtof相同):

  

如果字符串为空,仅包含空格,或不包含具有浮点数的预期语法的初始子字符串,则不执行转换。在这种情况下,strtod返回零值,* tailptr中返回的值是string的值。

答案 2 :(得分:0)

根据float strtof (const char* str, char** endptr); 如果你的第一个字符是' a'那你应该打电话:

x = strtof(line+2,&ptr);

如果line使用没有偏移量,strtof将解析" 12"并停在' a,您可以检查ptr值以查看解析停止的位置。