混淆初始化变量并在C ++中更改它们

时间:2016-02-21 23:20:41

标签: c++ variables initialization

我正在尝试创建一个允许用户输入矩形的高度和宽度的程序,并显示该区域,但是我的程序的每一步都是使用函数作为赋值的一部分完成的。

我遇到的问题是我已经分配了变量和初始化变量,但我不确定如何用用户输入的数据覆盖它们。如果我没有初始化变量,程序将无法运行。我希望有人能告诉我我做错了什么。我的代码是:

#include <iostream>
using namespace std;

double getWidth(int x);
double getLength(int y);
double getArea(double x, double y, double a);
double displayData(double a);

int main()
{
    int x = 0, y = 0, a = 0;
    getWidth(x);
    getLength(y);
    getArea(x, y, a);
    displayData(a);
    system("pause");
    return 0;
}

double getWidth(int x)
{
    cout << "Please enter the width: ";
    cin >> x;
    return x;
}
double getLength(int y)
{
    cout << "Please enter the length: ";
    cin >> y;
    return y;
}
double getArea(double x, double y, double a)
{
    a = x*y;
    return a;
}
double displayData(double a)
{
    cout << a << endl;
    return a;
}

2 个答案:

答案 0 :(得分:1)

有两种传递变量的方法。方法一是按值传递。这是最常用的方法,也是您的程序正在执行的方法。在此方法中,正在生成变量中的数据副本并将其提供给函数。您的函数只更改副本而不是原始变量。

第二种方法是通过引用传递。通过引用传递时,您的函数有效地具有指向原始变量的指针,因此可以更改它。要通过引用传递,请在函数头中的变量前放入一个&符号(&amp;)。请注意下面的代码中没有必要通过引用将x和y传递给getArea,因为getArea只需要读取这些变量而不是写入它们。

然而,这会为您带来一个新问题。当您通过值传递时,可以将变量类型更改为更大的类型,而无需显式强制转换。通过引用传递是不可能的,因为程序的不同部分将尝试将变量视为不同的类型。即,main想要写入/读取,就好像它是一个整数,并且getArea想要写入/读取,就好像它是一个double。这两种数据类型具有不同的大小和不同的格式,因此这是不可能的。因此,您必须在main中声明a是double。

#include <iostream>
using namespace std;

double getWidth(int &x);
double getLength(int &y);
double getArea(double x, double y, double &a);
double displayData(double a);

int main()
{
    int x = 0, y = 0;
    double a;
    getWidth(x);
    getLength(y);
    getArea(x, y, a);
    displayData(a);
    system("pause");
    return 0;
}

double getWidth(int &x)
{
    cout << "Please enter the width: ";
    cin >> x;
    return x;
}
double getLength(int &y)
{
    cout << "Please enter the length: ";
    cin >> y;
    return y;
}
double getArea(double x, double y, double &a)
{   
    a = x*y;
    return a;
}
double displayData(double a)
{
    cout << a << endl;
    return a;
}

答案 1 :(得分:0)

你似乎混淆了一些不同的概念。您应该传递引用并在函数内分配它们,或者传递较少的值并将它们分配给main中的某个变量。例如,您的getWidth应为:

double getWidth() {
  double w;
  cin >> w;
  return w;
}

在你的主要内容你应该:

int main() {
  /* ... */
  double width = getWidth();
  /* ... */
}

等等也是如此。您应该在C ++中查找引用和指针,这将是您可以执行此操作的另一种方式(并且您似乎对此感到困惑)。最后你应该在C ++书籍的一些介绍中找到函数的介绍,正如上面有人所说的那样。