-1

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

char *distance = NULL;
char *time = NULL;
char *pace = NULL;

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

我试过做

double testnum;
testnum = atof(time);

但我明白了

错误:在不是结构或联合的东西中请求成员“testnum”

4

5 回答 5

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);
    }
于 2013-10-17T13:01:08.830 回答
2

只需使用atof

double atof (const char* str);

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

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

于 2013-10-17T12:41:24.413 回答
0

看一下atof函数。它需要一个 char * 并尝试解析一个 double。

于 2013-10-17T12:41:05.967 回答
0

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

scanf("%f", &time);

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

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

#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
于 2013-10-17T12:42:25.603 回答
0

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

你有一个指向结构的指针并使用非指针.来访问成员。或者你有一个非指针结构并使用指针->来访问成员。

于 2013-10-17T12:57:37.623 回答