2016-11-08 91 views
1

我想在这个程序中输出三角形的计算区域,但是当我尝试从函数输出区域时,我得到了字母和数字的混合而不是答案,如果有人能指出什么我做错了,将不胜感激。C++函数输出

我累了tArea(区域),但它给出了一个不同的错误。

+2

'cout <<“该区域是”<< tArea;'你没有调用你的函数 – UKMonkey

回答

4

您没有调用该函数。当你使用没有括号的tArea名时,C++会给你函数的地址而不是调用它,并且这将以十六进制格式打印。当你做

cout << "the area is" << tArea; 

您将数据发送到标准输出

#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

此外,您还可以使用局部变量而不是使用参数工作计算。您可以将其视为将数据打印到控制台,因为这是标准输出正常进行的地方。

在这种情况下tArea仅仅是一个参考告诉计算机在哪里可以找到实际的tArea()功能代码。

所以你实际上只是打印参考tArea这是一个地址。该地址是一个数字,但iostream cout并不真正知道这意味着什么。它试图解释它能够做到的最好,并且它全部出现在字母和数字中。

你想要做的就是调用你的区域函数并打印返回的结果。要做到这一点,你必须在函数调用的最后添加圆括号。

如果你有不带任何参数,那么区域功能,你可以这样调用tArea();

然而,在你的代码中的函数签名如下

float tArea(float a, float b, float c, float s, float area) 

这意味着,为了让您的函数返回该区域作为一个浮点数,你必须传入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); 

这是更好,因为它从功能上签名删除小号。由于在函数内部进行计算之前不需要它们,并且它们立即在函数内重写,所以我们不在乎它们的值是什么。这就是为什么我告诉你他们都可以通过1.0。实际上,它们可以是任何浮动,并且因为它们立即被覆盖而没有关系。

小号面积应该仅针对区域功能的范围局部变量IanM_Matrix1已建议。这样做将允许这些临时变量在释放内存之前被销毁。这样做是一种更好的做法。