在C语言中将命令行参数转换为小数
我正在写一个程序,它接受命令行参数并对它们执行基本的算术运算。我使用getopt获取参数,并将它们存储为字符串。下面是我存储参数的变量在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); 但我明白了 错误:请求
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);
}