无法在c中获得字符串转换strtod

时间:2015-04-24 23:12:42

标签: c strtod

有人可以帮助我(对不起英语),我试图将字符串转换成双字符串,但是当我无法得到它时,我的代码(谢谢,我会非常感谢帮助):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_LONG 5

char bx[MAX_LONG];
double cali=0;

int main() {
scanf("%c",bx);
cali = strtod(bx,NULL);
printf("%f",cali);
return 0;
}

当我在输出中输入大于10的值时,它只打印第一个数字,如下所示:

 input: 23
 output: 2.00000
 input: 564
 output: 5.00000

2 个答案:

答案 0 :(得分:2)

你使用的scanf()说明符是错误的,除非你指定了多个字符,但是数组不会被nul终止,我建议如下

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() 
{
    char   bx[6]; /* if you want 5 characters, need an array of 6
                   * because a string needs a `nul' terminator byte
                   */
    double cali;
    char  *endptr;

    if (scanf("%5s", bx) != 1)
    {
        fprintf(stderr, "`scanf()' unexpected error.\n");
        return -1;
    }

    cali = strtod(bx, &endptr);
    if (*endptr != '\0')
    {
        fprintf(stderr, "cannot convert, `%s' to `double'\n", bx);
        return -1;
    }        
    printf("%f\n", cali);
    return 0;
}

答案 1 :(得分:0)

您应该尝试进行此更改以使其正常工作。

第一: 改变

scanf("%c",bx); /*Here you're reading a single char*/

对此:

scanf("%s",bx);/*Now you're reading a full string (No spaces)*/

第二: 变化

cali = strtod(bx,NULL);

对此:

cali = atof(bx);

我认为这对您来说是完美的。