华氏度到摄氏度计划的改进和选择输出

时间:2013-10-16 21:17:00

标签: c converter temperature

我几天前刚开始用C编程,我想改进我的程序,但不知道怎么做。

这个程序是华氏温度到摄氏温度,反之亦然。我用最简单的方式做到了。但现在我想这样做,以便我有2个函数c2f和f2c,它们将温度作为参数,当我运行程序时,我想要选择是否要从F转换为C或从C转换为F(类似于TempConverter -f 32这应该只将32转换为摄氏温度,TempConverter -c 100应该将100转换为华氏温度。)

我认为我的功能应该是这样的: float c2f(float c) float f2c(float f)

但是当我运行>之类的东西时,它究竟是如何做到的呢? TempConverter -f 50.0 我得到这样的东西让我们说吧? 10.00°C = 50.00°F

#include<stdio.h>

int main(void)
{
    // Local Declarations
    float Celsius, Fahrenheit, Fahrenheit_1, Celsius_2;

    // Statements
    printf("Enter the temperature in Fahrenheit: ");
    scanf("%f", &Fahrenheit);
    printf("Fahrenheit temperature is: %5.1f F\n\a", Fahrenheit);

    Celsius = (100.0 / 180.0) * (Fahrenheit - 32);

    printf("Celsius temperature is: %8.1f C\n\n\a", Celsius);

    printf("Enter the temperature in Celsius: ");
    scanf("%f", &Celsius_2);
    printf("Celsius temperature is: %8.1f C\n\a", Celsius_2);

    Fahrenheit_1 = 32 + (Celsius_2 * (180.0 / 100.0));

    printf("Fahrenheit temperature is: %5.1f F\a", Fahrenheit_1);

    return 0;

}

当前输出:

*输入华氏温度:20

华氏温度为:20.0°F

摄氏温度为:-6.7℃

以摄氏度输入温度:40

摄氏温度:40.0℃

华氏温度为:104.0 F *

所需输出

  

TempConverter -f 50.0

10.00°C = 50.00°F

3 个答案:

答案 0 :(得分:1)

您需要做的第一件事就是在代码中添加命令行参数,如下所示:

int main( int argc, char **argv )

argc包含在命令行中输入的参数数量;它总是&gt; = 1.

argv包含指向每个命令行参数字符串的指针。 argv[0]始终指向用于启动程序的字符串。 argv[argc]始终为NULL。

所以,如果你把你的程序称为

TempConverter -f 50.00

然后

argc == 3
argv[0] == "TempConverter"
argv[1] == "-f"
argv[2] == "50.00"
argv[3] == NULL

请注意,要在转换函数中使用最后一个参数,您需要将其从字符串转换为浮点值。 strtod是此选择的库函数:

char *check;
double intemp = strtod(argv[2], &check);

转换后,check将指向字符串中转换为浮点值的第一个字符。如果此字符不是空格或0,则输入值不是有效的浮点字符串。

所以,一般操作顺序:

  1. 检查argc的值。为了您的目的,它需要是3。
  2. 使用argv[2]strtod转换为浮点值。确保检查字符为0或空格。
  3. 检查你的华氏度/细胞开关;它必须是"-f""-c"(或您决定的任何内容)。
  4. 根据华氏度/ celcius开关调用相应的转换功能,并显示结果。

答案 1 :(得分:0)

您希望使用作为main

参数的命令行参数
int main(int argc, char *argv[])

此处argc对应于提供的参数数量,参数存储在argv中。请注意,程序的名称也被视为参数,并存储在argv[0]中。假设您希望标记为-f-c后跟float,则可以在main内使用它们,如下所示:

/** 
 * Check for the expected number of arguments (3)
 * (0) program name
 * (1) flag
 * (2) temperature
 */
if (argc!=3)
    printf("Incorrect number of arguments");

if (!strcmp(argv[1], "-f"))
   // process from fahrenheit to celsius
else if (!strcmp(argv[1], "-c"))
   // process from celsius to fahrenheit
else
   printf("Invalid flag\n");

请注意,无论何时处理用户输入,检查输入都符合您的预期非常重要。我建议的代码提供了一些示例,但您应该认真考虑如何使其更安全

答案 2 :(得分:0)

#include<stdio.h>

main(int argc,char** argv)
{
         int result;

         printf("\nValue of Celcius: \n");
         scanf("%i", &argc);
         printf("\n%i Celcius = ", argc);

         result = ((argc * 9) /5) + 32;

         printf("%i Fahrenheit\n", result);

         getchar();
         getchar();
         return 0;

}