在C中帮助铸造浮子
我只是想运行一个程序,将两个数字相加,并以浮点形式输出 例如: $Me./mc+12.3 应该产生 给我3.3美元或3.3000美元 以下是我所拥有的:在C中帮助铸造浮子,c,C,我只是想运行一个程序,将两个数字相加,并以浮点形式输出 例如: $Me./mc+12.3 应该产生 给我3.3美元或3.3000美元 以下是我所拥有的: #include <stdio.h> int main( int ac, char* args[] ) { float sum=0; if ((strcmp(args[1],"+")) == 0) { sum=atof(args[2])+atof(args[3]); prin
#include <stdio.h>
int main( int ac, char* args[] )
{
float sum=0;
if ((strcmp(args[1],"+")) == 0)
{
sum=atof(args[2])+atof(args[3]);
printf("%f\n", sum);
}
else
printf("exit");
return 0;
}
#包括
int main(int ac,char*args[]
{
浮点数和=0;
如果((strcmp(args[1],“+”)==0)
{
sum=atof(args[2])+atof(args[3]);
printf(“%f\n”,总和);
}
其他的
printf(“退出”);
返回0;
}
您应该改用strod
#include <stdio.h>
#include <stdlib.h>
void usage(const char *const program)
{
fprintf(stderr, "usage: %s x y [where x and y are numbers.]\n", program);
return -1;
}
void conversionFailed(const char *const program)
{
fprintf(stderr, "arguments should be numbers\n");
return usage(program);
}
int main( int ac, char* args[] )
{
float sum;
char *endptr;
if (ac < 4)
return usage(argv[0]);
if (strcmp(argv[1], "+") == 0)
{
sum = strtod(args[2], &endptr);
if (*endptr != '\0')
return conversionFailed(argv[0]);
sum += strtod(args[3], &endptr);
if (*endptr != '\0')
return conversionFailed(argv[0]);
printf("%f\n", sum);
}
return 0;
}
#包括
#包括
无效用法(常量字符*常量程序)
{
fprintf(stderr,“用法:%s x y[其中x和y是数字]\n”,程序);
返回-1;
}
无效转换失败(常量字符*常量程序)
{
fprintf(stderr,“参数应该是数字\n”);
返回使用(程序);
}
int main(int ac,char*args[]
{
浮点数;
char*endptr;
if(ac<4)
返回用法(argv[0]);
if(strcmp(argv[1],“+”==0)
{
sum=strtod(args[2],&endptr);
如果(*endptr!='\0')
返回转换失败(argv[0]);
sum+=strtod(args[3],&endptr);
如果(*endptr!='\0')
返回转换失败(argv[0]);
printf(“%f\n”,总和);
}
返回0;
}
首选
strod()
,因为它允许输入有效性检查。您应该使用strod
#include <stdio.h>
#include <stdlib.h>
void usage(const char *const program)
{
fprintf(stderr, "usage: %s x y [where x and y are numbers.]\n", program);
return -1;
}
void conversionFailed(const char *const program)
{
fprintf(stderr, "arguments should be numbers\n");
return usage(program);
}
int main( int ac, char* args[] )
{
float sum;
char *endptr;
if (ac < 4)
return usage(argv[0]);
if (strcmp(argv[1], "+") == 0)
{
sum = strtod(args[2], &endptr);
if (*endptr != '\0')
return conversionFailed(argv[0]);
sum += strtod(args[3], &endptr);
if (*endptr != '\0')
return conversionFailed(argv[0]);
printf("%f\n", sum);
}
return 0;
}
#包括
#包括
无效用法(常量字符*常量程序)
{
fprintf(stderr,“用法:%s x y[其中x和y是数字]\n”,程序);
返回-1;
}
无效转换失败(常量字符*常量程序)
{
fprintf(stderr,“参数应该是数字\n”);
返回使用(程序);
}
int main(int ac,char*args[]
{
浮点数;
char*endptr;
if(ac<4)
返回用法(argv[0]);
if(strcmp(argv[1],“+”==0)
{
sum=strtod(args[2],&endptr);
如果(*endptr!='\0')
返回转换失败(argv[0]);
sum+=strtod(args[3],&endptr);
如果(*endptr!='\0')
返回转换失败(argv[0]);
printf(“%f\n”,总和);
}
返回0;
}
首选
strod()
,因为它允许输入有效性检查。您应该包括stdlib.h
。否则,atof
的隐式定义将返回int
~$ man atof
1 ATOF(3) Linux Programmer's Manual ATO 1 F(3)
2
3
4
5 NAME
6 atof - convert a string to a double
7
8 SYNOPSIS
9 #include <stdlib.h>
10
11 double atof(const char *nptr);
~$man atof
1 ATOF(3)Linux程序员手册1 ATOF(3)
2.
3.
4.
5姓名
6 atof-将字符串转换为双精度字符串
7.
8概要
9#包括
10
11双atof(常量字符*nptr);
为了避免这些问题,正如@Keith Thompson提到的:
您应该在启用警告的情况下编译,以便编译器可以告诉您
关于这样的问题。对于gcc,使用-Wall-Wextra,并且可能
-标准=-迂腐的
您应该包括
stdlib.h
。否则,atof
的隐式定义将返回int
~$ man atof
1 ATOF(3) Linux Programmer's Manual ATO 1 F(3)
2
3
4
5 NAME
6 atof - convert a string to a double
7
8 SYNOPSIS
9 #include <stdlib.h>
10
11 double atof(const char *nptr);
~$man atof
1 ATOF(3)Linux程序员手册1 ATOF(3)
2.
3.
4.
5姓名
6 atof-将字符串转换为双精度字符串
7.
8概要
9#包括
10
11双atof(常量字符*nptr);
为了避免这些问题,正如@Keith Thompson提到的:
您应该在启用警告的情况下编译,以便编译器可以告诉您
关于这样的问题。对于gcc,使用-Wall-Wextra,并且可能
-标准=-迂腐的
main
的两个参数的常规名称是argc
和argv
。使用这些名称可以使您的代码更容易阅读。您没有说问题出在哪里。@KeithThompson:OP中有关该程序的评论中提到了argc
和argv
这两个参数的常规名称是argc
和argv
。使用这些名字可以让你的代码更容易阅读。你没有说问题出在哪里。@KeithThompson:OP关于这个程序的评论中提到了argc
和argv
,他没有检查签名。他正在找接线员。。。在本例中,“+”可能是因为他想在将来处理其他运算符(例如,“*”、“-”、“/”等)。我没有注意到这一点,因为我认为程序调用是/mc12.3
,没有+
符号,对不起。。。这就是为什么我修复了答案,比删除它要好,还因为它显示了首选的用法,至少对我来说是这样的,strod()
。但是OP应该选择徐丁的答案,因为他是解决问题的人。使用strtod可以更好地检查错误,但这不是问题所在。问题是缺少#include
。请看另一个答案。@KeithThompson是的,a已经评论过。。。看我之前的评论。他没有检查签名。他正在找接线员。。。在本例中,“+”可能是因为他想在将来处理其他运算符(例如,“*”、“-”、“/”等)。我没有注意到这一点,因为我认为程序调用是/mc12.3
,没有+
符号,对不起。。。这就是为什么我修复了答案,比删除它要好,还因为它显示了首选的用法,至少对我来说是这样的,strod()
。但是OP应该选择徐丁的答案,因为他是解决问题的人。使用strtod可以更好地检查错误,但这不是问题所在。问题是缺少#include
。请看另一个答案。@KeithThompson是的,a已经评论过。。。请参阅我之前的评论。更重要的是,您应该在编译时启用警告,以便