1

几天前我刚开始用 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 C

输入摄氏温度:40

摄氏温度为:40.0 C

华氏温度为:104.0 F*

期望的输出

温度转换器 -f 50.0

10.00°C = 50.00°F

4

3 回答 3

1

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

int main( int argc, char **argv )

argc包含在命令行中输入的参数数量;它总是 >= 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. 根据华氏/摄氏开关调用相应的转换函数,并显示结果。
于 2013-10-16T21:36:07.677 回答
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;

}
于 2014-05-07T07:48:15.517 回答
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");

请注意,每当您处理用户输入时,检查输入是否符合您的期望非常重要。我建议的代码给出了一些示例,但您应该认真考虑如何使其更加安全

于 2013-10-16T21:26:36.587 回答