我正在编写一个程序,它接受命令行参数并对它们执行基本的算术运算。我使用getopt
来获取参数,我将它们存储为字符串。以下是我在
char *distance = NULL;
char *time = NULL;
char *pace = NULL;
但是,如何将它们转换为小数?因此例如“5”将变为5.00或“6.12”将变为6.12。我尝试过搜索,但其他解决方案似乎对我不起作用。
我尝试过做
double testnum;
testnum = atof(time);
但我得到
错误:在非结构或联合的情况下请求成员'testnum'
答案 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
。
我猜测你有一个指向结构的指针,并使用非指针.
来访问该成员。 或您有一个非指针结构并使用指针->
来访问该成员。