我必须创建一个转换器,在 C 中将 F 转换为 C,反之亦然。 该程序应该有两个参数,第一个是所需转换的类型,第二个是必须转换的度数 例如:./program -f 50.0 和输出:10.00°C = 50.00°F 它还必须使用两个函数 f2c 和 c2f 来进行转换。 这是我的代码,运行良好,但它没有执行任何操作,因为由于某种原因未访问 ifs。
#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;
}
最佳答案
这里有两个问题:
首先,您尝试将字符串常量分配给单个字符:
char fArg = "-f";
char cArg = "-c";
你的编译器应该已经警告过你了。将它们更改为字符数组:
char fArg[] = "-f";
char cArg[] = "-c";
并修改对 strcmp
的调用以从这些变量中删除地址运算符 &
。
其次,第一个命令行参数实际上是程序的名称,而不是第一个用户参数。因此,无论在何处访问 argv
的元素,都将索引增加 1。
sscanf(argv[2], "%f", &arg2);
if(strcmp(argv[1], cArg) == 0)
...
else if(strcmp(argv[1], fArg) == 0)
关于c - C语言中华氏度到摄氏度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40095573/