无法通过引用函数"calcValues"中"firstNum"和"secondNum"变量来更改值

Failure to change values by reference of variables "firstNum" and "secondNum" in function "calcValues"

本文关键字:secondNum 变量 firstNum 引用 calcValues 函数      更新时间:2023-10-16

此程序接受英尺和英寸,并将它们转换为米和厘米。

我主要关心的是输出正确的值,如果能为其他两个问题提供帮助,我们将不胜感激!

有几件事我有问题,我会按重要性顺序列出:

我输出的值与输入计算机的值相同(我相信没有进行任何数学运算。例如:我输入12英尺6英寸,它返回12米6厘米的

我的do-white循环没有提供输入y/n以重复程序的选项(我认为我的do-White循环一定在错误的地方)

即使数学运算有效,我也不相信输出会正确呈现。例如:如果我输入12英尺9英寸,这将等于3.65米和22.86厘米,但这里的问题是,3.65米中的.65可以加成厘米,这样它就可以完全转换成以米为单位的整数,其余部分加成厘米(b/c 1米=100厘米),但不幸的是,我不能使用模运算符(%),因为这只适用于整数运算符,如果我想将数据类型double的米转换为数据类型int,以便modulos运算符能够工作,我认为"静态转换"在这里不起作用

重命名calValues函数中的变量

#include <iostream>
using namespace std;
void getNumbers(double& input1, double& input2);
void calcValues(double& variable1, double& variable2);
void showResults(double& result1, double& result2);
int main()
{
double firstNum, secondNum;
char ans;
cout << "This program accepts feet and inches " << endl;
cout << "to convert them into meters and centimeters." << endl;
do
{
getNumbers(firstNum, secondNum);
calcValues(firstNum, secondNum);
showResults(firstNum, secondNum);
} while (ans == 'y' || ans == 'Y');
cout << "Thank you for using the program." << endl;
return 0;
}
void getNumbers(double& input1, double& input2)
{
cout << "Enter in number of feet:" << endl;
cin >> input1;
cout << "Enter in number of inches:" << endl;
cin >> input2;
}
void calcValues(double& variable1, double& variable2)
{
const double METER = 0.3048, CENTI = 100, INCH = 12;
double finalMeter, finalCenti, tempFeet, tempMeter;
finalMeter = (variable1 * METER);
tempFeet = (variable2 / INCH);
tempMeter = (tempFeet * METER);
finalCenti = (tempMeter * CENTI);
}
void showResults(double& result1, double& result2)
{
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout << "The feet and inches you entered equates to " << endl;
cout << result1 << " meters and " << result2 << " centimeters." << endl;
cout << "Would you like to enter in " << endl;
cout << "new values for feet and inches? (y/n)" << endl;
}

calcValues中,如果您想更改它们所指的内容,则必须实际分配给variable1variable2,例如

void calcValues(double& variable1, double& variable2)
{
const double METER = 0.3048, CENTI = 100, INCH = 12;
double finalMeter, finalCenti, tempFeet, tempMeter;
finalMeter = variable1 * METER;
tempFeet = variable2 / INCH;
tempMeter = tempFeet * METER;
finalCenti = tempMeter * CENTI;
variable1 = finalMeter;
variable2 = finalCenti;
}

你真的不需要所有的括号。

附言:我怀疑这个计算是错误的,但我让你来解决这个问题。

char ans;
void calcValues(double& variable1, double& variable2)

您需要初始化/输入ans和变量。

好的,我相信我现在正在与"变量"交互(术语可能是错误的)我能够看到我的输出变化,而不是显示我一开始输入的相同数字,但我仍然不确定,在showResults函数中,我将finalMeter和finalCenti初始化为calcValues函数,这些参数是正确的,因为我只想与函数calcValues的一个部分(例如米)交互,而不是同时与两个部分交互。我认为如果我包括calcValue(input1,input2),这将导致两个数字都包括在输出中,而我使用的编译器(repl)将不允许我只传递一个参数,例如calcVaules(input1)。我认为这将允许我只显示第一个数字。

我经常玩这个代码,并从其他例子中学习,看看他们是如何格式化代码的,但我不理解数据移动到哪里的全部逻辑(变量到变量)。我知道传递引用适用于变量本身的位置,而不是在传递值中传递它的副本(我可能破坏了定义/我对这些概念的理解)

再次感谢所有的帮助,我理解yall的意思,但很难将其转化为一个可行的代码片段,使这个程序能够运行,

再次感谢:)

#include <iostream>
using namespace std;
void getNumbers(double& input1, double& input2);
double calcValues(double& variable1, double& variable2);
void showResults(double& output1, double& output2);
int main()
{
double firstNum, secondNum;
char ans;
cout << "This program accepts feet and inches " << endl;
cout << "to convert them into meters and centimeters." << endl;
do
{
getNumbers(firstNum, secondNum); 
calcValues(firstNum, secondNum);
showResults(firstNum, secondNum);
}while (ans == 'y' || ans =='Y');
cout << "Thank you for using the program." << endl;
return 0;
}
void getNumbers(double& input1, double& input2)
{
cout << "Enter in number of feet:" << endl;
cin >> input1;
cout << "Enter in number of inches:" << endl;
cin >> input2;
}
double calcValues(double& meters, double& centimeters)
{
const double METER = 0.3048, CENTI = 2.54, INCH = 12;

meters = (meters * METER);
centimeters = (centimeters * CENTI);
}
void showResults(double& input1, double& input2)
{
double finalMeter, finalCenti;
finalMeter = calcValues(input1, input2);
finalCenti = calcValues(input1, input2);
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout << "The feet and inches you entered equates to " << endl;
cout << finalMeter << " meters and " <<
finalCenti << " centimeters." << endl;
cout << "Would you like to enter in " << endl;
cout << "new values for feet and inches? (y/n)" << endl;
}