c - C语言中华氏度到摄氏度

标签 c

我必须创建一个转换器,在 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/

相关文章:

linux - 修改自旋锁时面临依赖问题

c - 指针运算

c - 将矩阵的主对角线与数字相乘

c - 如何将多个 .txt 文件读入单个缓冲区?

c - 生产者和消费者中的 sem_wait()

java - 如何高效获取数百万未排序 float 的排名?

C中ASCII字符串的压缩

c++ - 如何创建不依赖于 C 运行时的 Win32 DLL

高速缓冲存储器和存储器地址

c++ - 数组索引越界行为