使用sscanf将Char *转换为float

时间:2014-03-04 03:52:03

标签: c token

我试图使用sscanf将令牌转换为浮点数。代码编译并运行,但只要我输入一个值,我就得到0.0000。由于某种原因,它没有正确转换。

以下是代码:

while(1)
        {
        printf("repl> ");
        char *storage [30];
        char *tok;
        char g;
        double my_double;

        char buffer[20];
        int pos = 0, i;
        fgets(buffer,sizeof(buffer),stdin);

        tok = strtok(buffer," ");



        while (tok != NULL)
    {
        if (strcmp(tok, "add") == 0) printf("YES!!");
        else if (strcmp(tok, "add\n") == 0) printf("YELZZ!!!");

        if (strcmp(tok, "quit") == 0) exit(1);
        else if (strcmp(tok, "quit\n") == 0) exit(1);


         if (sscanf(tok, "%f", my_double) > 0)
         {
             Push(NULL, my_double, &head);
         }
         else
            Push(strdup(tok), 0, &head);

        tok = strtok(NULL," ");
    }
    Display(&head);

2 个答案:

答案 0 :(得分:2)

尝试将指向数字的指针传递给sscanf,而不是数字本身:

sscanf(tok, "%lf", &my_double);

sscanf函数需要知道存储结果的位置,因此传入my_double的副本将不起作用。

此外,正如Abhay所指出的,如果您正在阅读双重内容,则需要指定"%lf%作为格式字符串。

答案 1 :(得分:2)

由于变量my_double的类型为double,因此您必须使用%lf而不是%f。你也错过了&(正如克里斯正确指出的那样)

if (sscanf(tok, "%lf", &my_double) > 0)