Моя функция не будет возвращать значение локальной переменной в C ++ - PullRequest
0 голосов
/ 29 мая 2011

Я создал функцию для определения значения для cableBoxFeesTotal, затем он возвращает значение локальной переменной cableBoxFeesTotal.Когда я пытаюсь использовать значение cableBoxFeesTotal вне функции, значение равно 0,00, а не значение, которое было возвращено из функции.Я работал над этим в течение нескольких дней, и не могу понять, что я делаю неправильно.Пожалуйста, посоветуйте мне, как решить эту проблему.Спасибо!

Я не хотел публиковать весь код ... это домашняя работа, но я добавил два раздела ниже.

    #include <iostream>
    #include <string>
    #include <cctype>
    #include <iomanip>
    #include <cmath>

    using namespace std;

    const double BASIC_CABLE = 43.00;
    const double PREMIUM_CABLE = 58.00;
    const double BASIC_BOX = 7.50;
    const double PREMIUM_BOX = 11.25;
    const double PREMIUM_CHANNEL_FEE = 9.99;
    const double EMPLOYEE_DISCOUNT_AMOUNT = .14;

    double feeFunction (int cableBoxes, double serviceLevel, double cableBoxFeesTotal, double BASIC_BOX, double PREMIUM_BOX, char B, char P)

    {    
              if   (cableBoxes > 2 && serviceLevel == 'B')
              {          
                   cableBoxFeesTotal = ((cableBoxes - 2) * BASIC_BOX);
                   cout << "Cable Box Fees:  " << setw(15) << cableBoxFeesTotal << endl;
              }
              else if (cableBoxes > 2 && serviceLevel == 'P')
              {
                   cableBoxFeesTotal = ((cableBoxes - 2) * PREMIUM_BOX);
                   cout << "Cable Box Fees:  " << setw(15) << cableBoxFeesTotal << endl;
              }
              return (cableBoxFeesTotal);
    }

    int main()
    {

        string employee;

        bool hasPremium;

        char H;
        char B;
        char P;
        char premiumChannel;
        char serviceLevel;

        int cableBoxes = 0 ;

        double customerID;
        double monthlyRateTotal = 0.00;
        double cableBoxFeesTotal = 0.00;
        double premiumChannelTotal = 0.00;
        double subtotal = 0.00;`enter code here`
        double employeeDiscount = 0.00;
        double total = 0.00;

        feeFunction (cableBoxes, serviceLevel, cableBoxFeesTotal, BASIC_BOX, PREMIUM_BOX, B, P);
        cout << cableBoxFeesTotal << endl;

         if (hasPremium == true)
         {
              subtotal = (cableBoxFeesTotal + monthlyRateTotal + PREMIUM_CHANNEL_FEE);
              cout << "Subtotal:" << setw(15) << subtotal << endl;
         }
         else if (hasPremium == false)
         {
               subtotal = (monthlyRateTotal + cableBoxFeesTotal);
               cout << "Subtotal:" << setw(15) << subtotal << endl;
         }
   }

Ответы [ 3 ]

3 голосов
/ 29 мая 2011

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

cableBoxFeesTotal = feeFunction (1, 1.0, 0, 1.0, 1.0, 'b', 'p');

, чтобы вызвать его (где я только что составил значения для параметров, поскольку я не знаю, что вы намереваетесь.) Просматривая код, я вижу, что имена большинства параметров функции дублируют имена глобальных или локальных переменных в других местах; Я подозреваю, что вы просто еще не знаете, как работают параметры, верно? В этом случае вам нужно вернуться к учебнику и немного почитать.

0 голосов
/ 29 мая 2011

если бы вы вызывали вашу функцию feeFunction с параметрами, которые вы определили в main cableBoxes, это ВСЕГДА <2. Поскольку вычислительная часть вашей функции проверяет, что <code>cableBoxes > 2 она ВСЕГДА пропускает вычисления и возвращаетзначение, изначально присвоенное cableBoxFeesTotal, а именно 0.00

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

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

0 голосов
/ 29 мая 2011

Не могли бы вы показать мне коды для int main(), и в этом коде я не вижу, где вы используете функцию feeFunction ().Если я все еще помню, чтобы вернуть значение, мы просто используем return cableBoxFeesTotal;.Позвольте мне сначала проверить синтаксис C ++, и я вернусь с более конкретным ответом, чтобы решить эту проблему.В то же время, пожалуйста, сбросьте полные коды для этого.

Во-первых, неправильно используется ваша функция.Когда вы возвращаете значение через функцию, когда вызываете - вам нужно поместить значение в переменную.

сделать так:

double totalFeeFunction = feeFunction (cableBoxes, serviceLevel, cableBoxFeesTotal, BASIC_BOX, PREMIUM_BOX, B, P);

Только тогда вы можете использовать его, когда значение, возвращаемое на ваш счет, будет totalFeeFunction

...