我试图在这个程序中输出三角形的计算区域但是当我尝试从函数输出区域时,我会得到一个字母和数字的混合而不是答案,如果有人可以指出我在做什么错了,我们将不胜感激。
我已经厌倦了tArea(区域),但它给出了不同的错误。
答案 0 :(得分:4)
您没有调用此功能。当您使用不带括号的tArea名称时,C ++将为您提供函数的地址而不是调用它,并且将以十六进制格式打印。
此外,您可以使用局部变量而不是使用参数进行工作计算:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
float tArea(float a, float b, float c);
int main()
{
float a, b, c;
cout << "Enter side 1: ";
cin >> a;
cout << "Enter side 2: ";
cin >> b;
cout << "Enter side 3: ";
cin >> c;
cout << "the area is" << tArea(a, b, c);
return 0;
}
float tArea(float a, float b, float c)
{
float s = (a + b + c) / 2;
float area = sqrt(s*(s - a)*(s - b)*(s - c));
return area;
}
答案 1 :(得分:1)
当你这样做时
cout << "the area is" << tArea;
您正在向标准输出发送数据。您可以将此视为打印数据到控制台,因为这是标准输出通常所在的位置。
在这种情况下,tArea
只是一个引用,告诉计算机在哪里找到实际的tArea()
功能代码。
所以你实际上只是打印引用 tArea
这是一个地址。该地址是一个数字,但是iostream cout
并不真正知道这意味着什么。它试图尽可能地解释它,它出现了所有乱码的字母和数字。
您要做的是调用您的区域功能并打印返回的结果。为此,您必须在函数调用的末尾添加括号。
如果您的区域功能没有参数,那么您可以像tArea();
但是在您的代码中,函数签名如下
float tArea(float a, float b, float c, float s, float area)
这意味着为了让函数将区域作为float返回,您必须传入5个参数。所有这5个参数都必须是浮点数。
对你有效的电话会是
tArea(2.0, 2.1, 1.8, 3.0, 4.0);
通过更改此行
cout << "the area is" << tArea;
到这个
cout << "the area is" << tArea(a, b, c, 1.0, 1.0);
您可以解决问题。
我鼓励您更进一步,更改以下与您的确切问题无关的行。 改变
float tArea(float a, float b, float c, float s, float area)
{
s = (a + b + c) / 2;
area = sqrt(s*(s - a)*(s - b)*(s - c));
return area;
}
到
float tArea(float a, float b, float c)
{
float s = (a + b + c) / 2;
float area = sqrt(s*(s - a)*(s - b)*(s - c));
return area;
}
然后像这样称呼它
cout << "the area is" << tArea(a, b, c);
这样做更好,因为它会从函数签名中删除 s 和 area 。由于在区域函数内部进行计算之前不需要它们,并且它们会立即在函数内部重写,因此我们不关心它们之前的值。这就是为什么我告诉你他们都可以作为1.0传递。实际上它们可能是任何浮动的,因为它们会被立即覆盖,所以无关紧要。
s 和 area 应该是仅针对区域函数的范围的局部变量,正如IanM_Matrix1所建议的那样。这样做将允许在早期释放内存时释放这些临时变量。这样做是一种更好的做法。