2016-11-08 5 views
1

Я пытаюсь вывести вычисленную область треугольника в этой программе, но когда я пытаюсь вывести область из функции, я получаю смесь букв и цифр вместо ответа, если кто-то может указать, что Я делаю неправильно, это было бы очень признательно.C++ function output

У меня устал tArea (область), но это дает другую ошибку.

+2

'cout <<" область "<< tArea;' Вы не называете свою функцию – UKMonkey

ответ

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

Когда вы

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

Вы отправляете данные на стандартный вывод. Вы можете думать об этом как о печати данных на консоль, так как обычно идет стандартный вывод.

В этом случае 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); 

Это лучше, потому что она удаляет s и область от подписи функции. Поскольку они не нужны до вычисления, которое происходит внутри функции области, и они немедленно перезаписываются внутри функции, нам все равно, каковы их значения раньше. Вот почему я показал вам, что оба они могут быть переданы как 1.0. В действительности они могут быть любыми плавающими, и это не имело бы значения, так как они были немедленно перезаписаны.

сек и площадь должна быть локальной переменной специфичной только к объему функции области, как IanM_Matrix1 предложил. Таким образом, эти временные переменные будут уничтожены до освобождения памяти. Выполнение этого способа - это более эффективная практика.