0

我正在尝试编写一个由 3 个函数组成的 C++ 程序,一个用于输入,一个用于计算,一个用于输出。该程序应该将英尺和英寸作为输入,然后将米和厘米的转换值打印回用户。我认为通过引用调用有问题,因为我仍在学习如何正确使用它,无论如何这里是代码

#include<iostream>
using namespace std;
void input(double feet , double inches);
void calc(double &feet , double &inches);
void output(double &feet , double &inches);
void main()
{
 double feet1 , inches1;
 char ans;
 do
 {
  input(feet1,inches1);
  calc(feet1,inches1);
  output(feet1,inches1);
  cout<<"Would you like to calculate again? y/n : ";
  cin>>ans;
 }
 while(ans == 'y' || ans == 'Y');
}
void input(double feet , double inches)
{
 cout<<"Enter feet : ";
 cin>>feet;
 cout<<"Enter inches : ";
 cin>>inches;
}
void calc(double &feet , double &inches)
{
 double meters , centimeters;
 meters = feet * 0.3048;
 centimeters = inches * 2.54;
}
void output(double &feet , double &inches)
{
 calc(feet,inches);
 cout<<"Converted feet to metres : "<<metres;
 cout<<"Converted inches to centimeters : "<<centimeters;
}
4

3 回答 3

3

你有(至少)三个问题:第一个是你修改了传递给input函数的参数,但是由于参数是按值传递的(即复制),你只是修改了副本。您需要通过引用传递参数(您对其他函数执行此操作,即使您不需要它们)。

第二个问题是在你的calc函数中你声明meterscentimeters作为局部变量。一旦函数返回,这些变量就会超出范围并且不能从其他任何地方引用。

第三个问题,这应该给你一个编译错误,是你尝试使用metres(检查拼写,它与 in 不同calc)和centimeters来自输出函数,并且没有声明这些变量。

于 2014-05-09T13:07:17.457 回答
0

您将英尺与米配对,英寸与厘米配对的方式会让您陷入纠结:对于各种转换,您最终会得到大于 12 的英寸或大于 100 的厘米。

如果我是你,我将只保留两个变量——米和英尺——并应用它们之间的转换。然后您可以完全删除引用,因为转换函数将返回单个值。

然后,要将英尺转换为英尺和英寸,您可以使用

(int)feet

脚部

(feet - (int)feet) * 12

对于英寸部分。

于 2014-05-09T13:06:00.633 回答
0
void input(double feet , double inches);

当您想更改英尺和英寸时,您可以像在其他功能中一样使用参考。

void calc(double &feet , double &inches)

在此功能中,您可以更改本地“米”和“厘米”,但在离开该功能时会丢失。此外,您对英尺和英寸什么也不做,因此您不需要参考。你可以用类似的东西改变它:

void calc(const double feet , const double inches, double &meters, double &centimeters)

现在您可以使用“输入”数据(英尺、英寸)和“输出”(米、厘米)来调用此函数。

在输出函数中,我不确定你是想在其中调用 calc 还是错误(因为在 main/while 循环中也调用了 calc 函数)但在输出函数中你需要给它米和厘米。或者因为它是这样 calc 给你你需要的数据,但不要在 do-while 循环中调用 calc 。

其他事情:

#include<iostream>
using namespace std;
#include<iostream>
using namespace std;

一次就够了。

#include<iostream>
#include<iostream>
using namespace std;
于 2014-05-09T13:30:39.557 回答