函数在执行while循环时不更新变量

Function not updating variable as it goes through a while loop

本文关键字:更新 变量 循环 执行 while 函数      更新时间:2023-10-16
#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;
}

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

您的wiregauge参数在两个函数中的每一个都用于以下计算:

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

由于abint,并且wiregauge是唯一从呼叫到另一个呼叫变化的参数。ab总是等于0。函数的返回值将始终是相同的。

要解决这个问题,可以将a的类型更改为double

int a杀死你在a=((36-wiregauge)/39);中的除法,其余的从那里开始保持不变,直到你变成负数。