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

时间:2013-10-17 12:38:48

标签: c

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

中存储参数的变量
char *distance = NULL;
char *time = NULL;
char *pace = NULL;

但是,如何将它们转换为小数?因此例如“5”将变为5.00或“6.12”将变为6.12。我尝试过搜索,但其他解决方案似乎对我不起作用。

我尝试过做

double testnum;
testnum = atof(time);

但我得到

错误:在非结构或联合的情况下请求成员'testnum'

5 个答案:

答案 0 :(得分:3)

您也可以尝试使用strtof()

#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);
    }

答案 1 :(得分:2)

只需使用atof

double atof (const char* str);

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

虽然它不是特别健壮:特别是如果输入不可转换则返回零,如果输入数字太大则返回未定义行为

答案 2 :(得分:0)

查看atof功能。它需要一个char *并尝试解析一个double。

答案 3 :(得分:0)

您可以使用相应类型的scanf开始。

scanf("%f", &time);

然后使用printf在必要时将类型转换为字符串。

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

#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

答案 4 :(得分:0)

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

猜测你有一个指向结构的指针,并使用非指针.来访问该成员。 您有一个非指针结构并使用指针->来访问该成员。