无法通过引用函数"calcValues"中"firstNum"和"secondNum"变量来更改值
Failure to change values by reference of variables "firstNum" and "secondNum" in function "calcValues"
此程序接受英尺和英寸,并将它们转换为米和厘米。
我主要关心的是输出正确的值,如果能为其他两个问题提供帮助,我们将不胜感激!
有几件事我有问题,我会按重要性顺序列出:
我输出的值与输入计算机的值相同(我相信没有进行任何数学运算。例如:我输入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
中,如果您想更改它们所指的内容,则必须实际分配给variable1
和variable2
,例如
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;
}
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 执行函数时导致崩溃的变量
- 无法通过引用函数"calcValues"中"firstNum"和"secondNum"变量来更改值