【问题标题】:Writing 3 functions to convert feet and inches to meters and centimeters in C++?在 C++ 中编写 3 个函数来将英尺和英寸转换为米和厘米?
【发布时间】:2014-05-09 12:56:55
【问题描述】:

我正在尝试编写一个由 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;
}

【问题讨论】:

  • 让它void input(double&amp; feet , double&amp; inches)
  • 另外,calc 不返回任何内容。
  • 您已将functional-programming 添加到标签中。然而,您的程序完全是程序性的。另外,请缩进您的代码。

标签: c++ function inches


【解决方案1】:

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

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

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

【讨论】:

  • +1,尽管(不幸的是)我们的美国同事喜欢使用meter 等。
  • 所以你是说我必须让第一个函数通过引用参数调用,但对于其他两个函数我应该继续使用按值传递?另外我该如何解决你提到的第二个问题?谢谢:)
  • @KareemYoussef 关于论点,是的,这是正确的。至于第二个和第三个问题,简单的解决办法就是让这些变量全局化。更好的解决方案可能是必须向calc 提供更多(引用)参数以“返回”这些变量,然后将它们作为简单(非引用)参数传递给output
  • 我通过引用函数调用了 calc,但是当我将变量厘米和米设为全局变量时,它们的输出均为 0。
  • @KareemYoussef (全局)变量为零,因为您仍在 calc 函数中再次声明它们,这将隐藏全局变量。不要在本地声明它们。
【解决方案2】:

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

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

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

(int)feet

脚部

(feet - (int)feet) * 12

英寸部分。

【讨论】:

    【解决方案3】:
    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      相关资源
      最近更新 更多