【问题标题】:Converting a Char * to a float using sscanf使用 sscanf 将 Char * 转换为浮点数
【发布时间】:2014-03-04 03:52:02
【问题描述】:

我正在尝试使用 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);

【问题讨论】:

    标签: c token


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      sscanf 函数需要知道将结果存储在哪里,因此传入 my_double 的副本是行不通的。

      此外,正如 Abhay 所指出的,如果您正在读取双精度字符串,则需要将 "%lf% 指定为格式字符串。

      【讨论】:

      • 是的,我试过了,没有骰子
      • 确认 tok 包含您认为的字符串,仅此而已。然后 Chris 的代码工作。
      • 哦事实上 tok 可能包含一个 "\n" 但我不知道如何删除它然后转换@PhilPerry
      • 请举例说明您的输入?
      • 例如:repl> 3 2 或 repl> 4 @cklin
      猜你喜欢
      • 2011-02-28
      • 2019-01-06
      • 2021-07-16
      • 2012-10-11
      • 2020-09-02
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2016-11-20
      相关资源
      最近更新 更多