通过命令提示符C语言提供浮点参数

时间:2019-01-13 16:54:37

标签: c command-line-arguments command-prompt

我在使用命令提示符获取变量(在命令提示符中编写)并在程序中使用它们时遇到了困难。我的想法是我使用以下程序编译程序:

gcc main.c

并通过运行创建的a.exe和参数来执行它。

如下:

C:\ Users \ Pc \ Desktop \ resistance> gcc main.c

C:\ Users \ Pc \ Desktop \ resistance> a.exe 0.0005 1.5 160

48.000000 49.000000 49.000000提供的参数不足

最后一行是我从代码中收到的值,从我提供的参数来看,这是不正确的。

以及通过“没有提供足够的参数” if语句终止代码的事实。这再次令人困惑,因为* argv []从0 * argv [0]开始,该值应等于“ a.exe”,因此以下参数应= * argv [1] ... ect

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

float areaOfcircle(float radius_circle)
{
    float area_circle;
    area_circle = M_PI * radius_circle * radius_circle;

    return area_circle;
}
void resitance_current(float length, float area_circle, float voltage, float* resistance, float* current)
{
    float resistivity;
    resistivity = 1.782*pow(10, -8);
    *resistance = ((resistivity*length) / area_circle);
    *current = (voltage / *resistance);
}
int main(int argc, char *argv[])
{
    float radius, voltage, length, current, resistance;
    float length_u, length_l;
    voltage = *argv[1];
    length = *argv[2];
    radius = *argv[3];
    printf("%f %f %f", voltage, length, radius);
    //char response, yes;
    // take radius as input
    //printf("Enter the radius of wire : ");
    //scanf("%f", &radius);
    if (argc != 3)
    {
        printf("Not enough arguments supplied");
    }
    else
    {
        if (radius < 0)
        {
            exit(1);
        }
        else
        {
            //printf("Enter the Voltage of circuit : ");
            //scanf("%f", &voltage);
            if (voltage < 0)
            {
                exit(1);
            }
            else
            {
                //printf("Enter the Length of Wire : ");
                //scanf("%f", &length);
                if (length < 0)
                {
                    exit(1);
                }
                else
                {
                    resitance_current(length, areaOfcircle(radius), voltage, &resistance, &current);
                    printf("Resistance = %f , Current = %f\n", resistance, current);
                    printf("\nEnter the Upper Length of Wire : ");
                    scanf("%f", &length_u);
                    printf("\nEnter the Lower Length of Wire : ");
                    scanf("%f", &length_l);
                    if ((length_l < 0) || (length_l >= length_u))
                    {
                        exit(1);
                    }
                    else
                    {
                        for(length_l = length_l; length_l<=length_u; length_l++)
                        {
                            length = (length_l + 1);
                            resitance_current(length, areaOfcircle(radius), voltage, &resistance, &current);
                            printf("\nLength = %0.3f Resistance = %0.3f , Current = %0.3f", length, resistance, current);
                        }
                    }

                }
            }
        }
    }
    return 0;
}

在23-25行中,我尝试为变量名分配所提供的参数。使他们更容易阅读代码。

我要寻求帮助的主要问题是如何获取(从program.exe名称后面的命令行读取/输入的整数/浮点数,并在代码中正确使用了。

*此步骤已预先编写了代码,因此,如果我错过了代码中的任何内容,请也提供帮助,谢谢。希望您能提供帮助:)

3 个答案:

答案 0 :(得分:2)

警告程序的路径名是第一个参数,因此在您的情况下, argc 必须与4进行比较,这就是为什么您有这种行为

另一句话:您需要先检查argc,然后才能访问strongv

答案 1 :(得分:2)

这是做什么的?

  voltage = *argv[1];
    length = *argv[2];
    radius = *argv[3]

您正在尝试获取字符串值并将其分配给浮点数。这是行不通的。您需要使用atof()函数(https://www.tutorialspoint.com/c_standard_library/c_function_atof.htm)之类的东西来转换字符串。

ex;   voltage = atof(argv[1])

还编译时带有完整警告。

答案 2 :(得分:0)

您可以尝试打印出argc和所有argv字符串的值,以查看它们的含义。您可能会感到惊讶。在代码中添加以下功能:

void dumpargs(int argc, char *argv[])
  {
  int i;

  printf("argc = %d\n", argc);

  for(i = 0 ; i < argc ; ++i)
    printf("argv[%d] = '%s'\n", i, argv[i]));
  }

然后在main中的变量声明之后添加以下内容作为第一行:

dumpargs(argc, argv);