【问题标题】:Function not updating variable as it goes through a while loop [closed]函数在通过while循环时不更新变量[关闭]
【发布时间】:2016-01-25 14:53:48
【问题描述】:
#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <iostream>

using namespace std;
//resistivity ohms*meters
/*
 * 
 */
double diameter (double wiregauge)
{
  double k;
  double diam;

    k=((36-wiregauge)/39);
    diam=(.127)*(pow(92,k));
    diam=(diam/100);

  return diam;
}
double copperWireResistance(double length, double wiregauge)
{
    const long double PI=(atan(1)*4);
    int b; //equals k in the first function
    double diam1; //diameter of the wire
    double cross_area_copper; //denominator of the equation
    double numerator1; //numerator of the equation
    double p; //resistivity of copper
    double coppWireResistance;

    b=((36-wiregauge)/39);
    diam1=(.127*pow(92,b));
    diam1=(diam1/100);
    cross_area_copper=PI*(pow(diam1,2));
    p=(1.678*(pow(10,-8)));
    numerator1=((4*p)*length);

    coppWireResistance=numerator1/cross_area_copper;

        return coppWireResistance;

}

double aluminumWireResistance(double length, double wiregauge)
{
    const long double PI=(atan(1)*4);
    int a;
    double diam2;
    double numerator2;
    double cross_area_alum;
    double p1;
    double alumWireResistance;

    a=((36-wiregauge)/39);
    diam2=(.127*pow(92,a));
    diam2=(diam2/100);
    cross_area_alum=(PI*pow(diam2,2));
    p1=(2.82*pow(10,-8));
    numerator2=((4*p1)*length);

    alumWireResistance=numerator2/cross_area_alum;

        return alumWireResistance;
}


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

    double Max_N; //maximum wire gauge value
    double L; //Length of the wire
    double string_gauge=0;

    cout<<"Maximum wire gauge value: ";
    cin>>Max_N;
    cout<<"Length of Wire: ";
    cin>>L;


    while(string_gauge<Max_N)
    {
    cout<<"String Gauge: "<<string_gauge<<endl;
    cout<<"Diameter of wire: "<<diameter(string_gauge)<<endl;
    cout<<"Copper Wire Resistance: "<<copperWireResistance(L,string_gauge)<<endl;
    cout<<"Aluminum Wire Resistance: "<<aluminumWireResistance(L,string_gauge)<<endl;


    string_gauge++;
    cout<<endl;
    }



    return 0;
}

我试图让铜线电阻和铝线电阻在循环运行时更新,但在第一个数字之后它不会更新到新的弦规。有什么需要补充的理由吗?

【问题讨论】:

  • 请提供重要部分而不是整个程序
  • 您是否使用调试器逐步完成了此操作?请参阅 Eric Lippert 的 How to debug small programs
  • 据我了解,您的“铜线电阻”和“铝线电阻”在任何迭代中都不会改变,是不是有问题?

标签: c++ loops variables while-loop


【解决方案1】:

你在两个函数中的wiregauge参数分别用于以下计算:

a=((36-wiregauge)/39); // in aluminumWireResistance
b=((36-wiregauge)/39); // in copperWireResistance

因为abint,并且wiregauge 是唯一一个从调用到另一个调用的参数。 ab 将始终等于 0。并且您的函数的返回值将始终相同。

要解决此问题并获得更高的精度,您可以将a 的类型更改为double

【讨论】:

  • 谢谢,我是编码新手,我错过了一件简单的事情,我很感激!
【解决方案2】:

【讨论】:

    【解决方案3】:

    您的copperWireResistancealuminumWireResistance 函数中的ab 变量存在一些问题。您将它们声明为 int,但在您的等式中,您获得了一个值,小于一个值。

    就像结果一样,您总是会获得相同的值,从函数返回。

    因此,将类型更改为 floatdouble

    ps。并将您的 Max_N 类型更改为 intlong,如果您将数字与 运算符进行比较。

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2016-04-10
      • 2021-05-27
      • 2013-08-27
      • 2016-02-14
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2019-03-11
      相关资源
      最近更新 更多