【发布时间】:2016-10-17 21:01:12
【问题描述】:
我必须创建一个转换器,在 C 中从 F 转换为 C,反之亦然。 该程序应该有两个参数,第一个是所需的转换类型,第二个是必须转换的度数 例如:./program -f 50.0 和输出:10.00°C = 50.00°F 它还必须使用两个函数 f2c 和 c2f 来进行转换。 这是我的代码,运行良好,但由于某种原因没有访问 if,它什么也没做。
#include <stdio.h>
#include <float.h>
#include <string.h>
float c2f ( float c);
float f2c ( float f);
int main(int argc, char *argv[])
{
char fArg = "-f";
char cArg = "-c";
float arg2;
sscanf(argv[1], "%f", &arg2);
if(strcmp(argv[0], &cArg) == 0)
{
float fValue = c2f(arg2);
printf("%f C = ", arg2);
printf("%f F\n", fValue);
}
else if(strcmp(argv[0], &fArg) == 0)
{
float cValue = f2c(arg2);
printf("%f C = ", cValue);
printf("%f F\n", arg2);
}
}
float c2f ( float c)
{
float f;
f = 9*c/5 + 32;
return f;
}
float f2c ( float f)
{
float c;
c = ((f-32) * 5)/9;
return c;
}
【问题讨论】:
-
如果两个
if测试都失败了,那么您就没有无条件的else子句,并且没有任何反应。所以......添加一个else,你可能最终会得到一些输出。例如... } else { printf("No args matched\n"); }请注意,argv[0]是可执行文件的名称。参数从[1]... 开始 -
在命令行传递的第一个参数一般是
argv[1](argv[0]通常是程序名)。此外,您不需要在字符串比较中使用地址运算符:strcmp(argv[0], &cArg)应该是strcmp(argv[1], cArg) -
是的,如果测试都失败了,我会用另一个测试来检查。即使我将 argv[0] 更改为 argv[1] 等等,也不会发生其他任何事情。另外,如果我删除并弹出分段错误错误
-
@mateicoman 您是否还修复了
fArg和cArg的定义? -
您是否尝试在调试器下运行程序,以便查看变量内容?这应该可以帮助你看到你的错误。
标签: c