我的问题是,如果命令行没有提供足够的参数,我希望程序改为请求所有值。出于某种原因,当我在3个参数中提供2个时,它可以工作,但是如果要提供1个或不提供任何参数,我希望它可以工作。
我的代码
#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);
}
void radius_check(float radius)
{
if (radius <= 0)
{
printf("Radius cant be less than or equal to 0");
exit(1);
}
}
void voltage_check(float voltage)
{
if (voltage <= 0)
{
printf("Voltage cant be less than or equal to 0");
exit(1);
}
}
void length_check(float length)
{
if (length <= 0)
{
printf("Length cant be less than or equal to 0");
exit(1);
}
}
void validation(float radius, float voltage, float length)
{
radius_check(radius);
voltage_check(voltage);
length_check(length);
}
int main(int argc, char *argv[])
{
float radius, voltage, length, current, resistance;
float length_u, length_l;
//dumpargs(argc, argv);
radius = atof(argv[1]);
voltage = atof(argv[2]);
length = atof(argv[3]);
if (argc != 4)
{
printf("Not enough arguments supplied\n");
printf("Enter the radius of wire : ");
scanf("%f", &radius);
radius_check(radius);
printf("Enter the Voltage of circuit : ");
scanf("%f", &voltage);
voltage_check(voltage);
printf("Enter the Length of Wire : ");
scanf("%f", &length);
length_check(length);
}
validation(radius, voltage, length);
resitance_current(length, areaOfcircle(radius), voltage, &resistance, ¤t);
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))
{
printf("\nImpossible for Lower Length < 0 or to be larger then Length Upper");
exit(1);
}
else
{
for(length_l = length_l; length_l<=length_u; length_l++)
{
resitance_current(length, areaOfcircle(radius), voltage, &resistance, ¤t);
printf("\nLength = %0.3f Resistance = %0.3f , Current = %0.3f", length, resistance, current);
length = (length_l + 1);
}
}
return 0;
}
从代码“ if(argc!= 4)”中可以看出,如果通过命令行提供了值,则会再次请求并覆盖这些值。我试图对此寻求解决方案,因此,如果仅从CMD运行程序,则将请求值,但如果提供了所有值,则代码将一直运行。除了argc iss之外,代码也按要求运行。
非常感谢您提前提供帮助
答案 0 :(得分:3)
如果传递的参数小于super.onResume()
,则访问范围不受限制。
只需修改以下代码。
首先检查传递的参数数量,然后访问4
。
argv
还需要检查 if (argc != 4) // or if (argc < 4)
{
printf("Not enough arguments supplied\n");
printf("Enter the radius of wire : ");
scanf("%f", &radius);
printf("Enter the Voltage of circuit : ");
scanf("%f", &voltage);
printf("Enter the Length of Wire : ");
scanf("%f", &length);
}
else {
radius = atof(argv[1]);
voltage = atof(argv[2]);
length = atof(argv[3]);
}
radius_check(radius);
voltage_check(voltage);
length_check(length);
,Read this on how to check scanf return value的返回值。