2016-12-06 3 views
1

Студент здесь. Я пропускаю один пункт рубрики в следующей проектной программе и не могу определить, куда ее поместить, «это» является элементом пересылки. Если кто-то чувствует себя великодушным, пожалуйста, взгляните на мою программу ниже и дайте мне хедз-ап о том, где я мог бы настроить код, чтобы сделать возможным пересылку. Как бы то ни было, я в тупике, и у меня нет достаточно времени, чтобы придумать совершенно новую проблему, для которой можно было бы закодировать решение. Спасибо всем заранее!Есть ли способ добавить ссылку на этот код?

#include <iostream> 
#include <cmath> 
using namespace std; 

//Global Variable 
int height = 0; 

//Function Prototypes 
int getMale(); 
int getFemale(); 

int main() 
{ 

    //Local Variable 
    int ideal = 0; 
    char sex(' '); 

    //Sequence Structure 
    cout << "Welcome to the Hamwi Ideal Body Weight Equation Calculator!" << endl; 
    cout << "Please enter your height in inches (remember, 1 foot = 12 inches): " << endl; 
    cin >> height; 

    cout << "Please enter your biological sex (M or F): " << endl; 
    cin >> sex; 

    //Repetition Structure 
    while (toupper(sex) != 'M' && 'F') 
    { 
     cout << "Invalid entry. Please enter your biological sex (M or F): " << endl; 
     cin >> sex; 
    } //end while 

    //Selection Structure 
    if (toupper(sex) == 'M') 
    { 
     int ideal = getMale(); 
     cout << "Thank you. Your ideal body weight is approximately: " << ideal << " pounds." << endl; 
     cout << "Have a nice day!" << endl; 
    } //end if 

    else 
    { 
     int ideal = getFemale(); 
     cout << "Thank you. Your ideal body weight is approximately: " << ideal << " pounds." << endl; 
     cout << "Have a nice day!" << endl; 
    } //end else 

    return 0; 
} //end of main function 

//Program-Defined Function #1 (Male) 
int getMale() 
{ 
    //Local Variable 
    int male = 0; 

    if (height >= 60) 
    { 
     male = 106 + ((height - 60) * 6); 
     return male; 
    } //end if 

    else 
    { 
     male = 106 - ((60 - height) * 6); 
     return male; 
    } //end else 
} //end of male function 

//Program-Defined Function #2 (Female) 
int getFemale() 
{ 
    //Local Variable 
    int female = 0; 

    if (height >= 60) 
    { 
     female = 100 + ((height - 60) * 5); 
     return female; 
    } //end if 

    else 
    { 
     female = 100 - ((60 - height) * 5); 
     return female; 
    } //end else 
} //end of female function 
+2

Почему, по вашему мнению, вам нужно пройти ссылку? – alexeykuzmin0

+0

Это рубрика (рубрика). Обязательный элемент для проекта. – CVHansen

+0

Сделать высоту локальной переменной в вашей основной функции, а затем передать ее вашим функциям – Jonas

ответ

1

Вы можете переместить переменную height в main() (сделать его локальным) и передать его по ссылке на все ваши функции. На самом деле, я бы сказал, что это будет лучший стиль, чем передача данных через глобальные переменные.

Но в реальном проекте обычно лучше подумать о том, какое поведение вы хотите от своей программы, а не о том, какие удивительные функции языка вы хотите использовать.

+0

Это хорошая идея! Тем не менее, я все еще боюсь с прототипом и строками заголовка для программных функций. Сегодня я провел хорошие 2 часа, пытаясь получить две функции, которые я должен на самом деле работать. Если я хочу передать ссылку на высоту, мой прототип и заголовок выглядят так: int getMale (int & height); // и int getMale (int & height) // ??? – CVHansen

+0

Да, вы можете использовать созданные вами прототипы, но лучше было бы использовать 'int getMale (const int & height)' - ссылка const используется для добавления дополнительной проверки компилятора, чтобы запретить вам изменять 'height' внутри функции , – alexeykuzmin0

+0

Это зависит от поведения, которое вы хотите. Например, если вы хотите вернуть несколько значений из своей функции (что невозможно сделать напрямую), вы можете просто передать несколько ссылок и затем «вернуть» несколько значений, изменив ссылочные параметры. – Travis

2

Вы передаете height по ссылке в одной из ваших гендерных функций.

Например:

int getMale(int &height) { 
    /* do stuff */ 
} 

А потом просто называть его:

getMale(height); 

Кроме того, вы идете требуется использовать глобальную переменную? Если нет, то введите height локальную переменную в main, как заявили другие комментаторы. Глобальные переменные считаются плохим стилем, поскольку они могут вызвать проблемы с жесткой диагностикой, когда вы работаете над гораздо более крупным проектом.

+1

Глобальные переменные - нет-нет. Хорошо знать! Спасибо, Трэвис. – CVHansen

+0

Одним исключением является глобальная * константа *. Поскольку константы не могут быть изменены, их можно безопасно сделать глобальными, не сталкиваясь с теми же проблемами, что и глобальные переменные. – Travis

1

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

#include<iostream> 
using namespace std; 

//Prototype 
void add(int num1, int num2, int &res); 
int main() 
{ 
    int res; 
    add(1, 2, res); 
    cout<<"I got the value by passing my variable by reference"<<res<<endl; 
    return 0; 
} 
void add(int num1, int num2, int &res) 
{ 
    res = num1 + num2; 
} 
2

Объявите ваши две функции, как этот

int getMale (int& height); 
int getFemale (int& height); 

И в главном вы объявляете переменную, которую можно передать в функции

int main() 
{ 
    // Declare here instead of globally 
    int height = 0; 

    // Then you can call 
    int result = getMale(height); 
     result = getFemale(height); 
} 

Он будет вести себя так же. Считается, что более эффективная практика должна проходить по ссылке, чем использовать глобальную переменную, так что вам будет легче задавать этот вопрос.

Смежные вопросы