在C语言中将命令行参数转换为小数

在C语言中将命令行参数转换为小数,c,C,我正在写一个程序,它接受命令行参数并对它们执行基本的算术运算。我使用getopt获取参数,并将它们存储为字符串。下面是我存储参数的变量 char *distance = NULL; char *time = NULL; char *pace = NULL; 但是,如何将它们转换为小数?例如,5将变成5.00或6.12将变成6.12。我尝试过四处搜索,但其他解决方案似乎对我不起作用 我已经试过了 double testnum; testnum = atof(time); 但我明白了 错误:请求

我正在写一个程序,它接受命令行参数并对它们执行基本的算术运算。我使用getopt获取参数,并将它们存储为字符串。下面是我存储参数的变量

char *distance = NULL;
char *time = NULL;
char *pace = NULL;
但是,如何将它们转换为小数?例如,5将变成5.00或6.12将变成6.12。我尝试过四处搜索,但其他解决方案似乎对我不起作用

我已经试过了

double testnum;
testnum = atof(time);
但我明白了

错误:请求非结构或联合中的成员“testnum”

查看函数。它接受char*并尝试解析double。

只需使用atof:

解析C字符串str,将其内容解释为浮点数,并将其值返回为double


不过,它并不特别健壮:特别是,如果输入不可转换,它将返回零;如果输入数太大,它将返回未定义的行为。

您可以从使用适当类型的scanf开始

scanf("%f", &time);
然后在必要时使用printf将类型转换为字符串

如果确实需要从字符串转换类型,请查找atoX样式的函数来执行转换。例如,下面是一个将ascii转换为i整数的程序


您提供的示例代码与您的错误不匹配。错误告诉我们在结构中找不到testnum


我猜你有一个指向结构的指针,使用非指针。以访问该成员。或者您有一个非指针结构,并使用pointer->访问该成员。

您也可以尝试strof

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

int main(void)
    {
        char *string, *stopstring;
        double x;
        float f;
        long double ld;

        string = "3.1415926This stopped it";
        f = strtof(string, &stopstring);
        printf("string = %s\n", string);
        printf("strtof = %f\n", f);
        printf("Stopped scan at \"%s\"\n\n", stopstring);
    }

谢谢,我已经试过了,看看我的编辑。你可以看看@ana的链接。不久前,我也会重新实现可用的功能。这是一个很好的学习方法。当存在成本较低的替代方案时,这也是一种浪费时间和引入意外行为错误的好方法。有时确实需要在旧函数上添加新的折痕,但大多数情况下,可以通过将旧函数组合成例程来管理这些事情。除了这些非常特殊的情况外,通常最好重用标准函数。我更推荐使用它,因为它可以更容易地检查错误。+1用于建议唯一真正可用的方法。您的错误消息与您显示的代码片段不匹配。请提供导致错误的实际代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   int val;
   char str[20];

   strcpy(str, "98993489");
   val = atoi(str);
   printf("String value = %s, Int value = %d\n", str, val);

   strcpy(str, "tutorialspoint.com");
   val = atoi(str);
   printf("String value = %s, Int value = %d\n", str, val);

   return(0);
}enter code here
#include <stdlib.h>
#include <stdio.h>

int main(void)
    {
        char *string, *stopstring;
        double x;
        float f;
        long double ld;

        string = "3.1415926This stopped it";
        f = strtof(string, &stopstring);
        printf("string = %s\n", string);
        printf("strtof = %f\n", f);
        printf("Stopped scan at \"%s\"\n\n", stopstring);
    }