Моя функция не вернет значение локальной переменной в C

#c #function #return-value

#c #функция #возвращаемое значение

Вопрос:

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

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

     #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 amp;amp; serviceLevel == 'B')
              {          
                   cableBoxFeesTotal = ((cableBoxes - 2) * BASIC_BOX);
                   cout << "Cable Box Fees:  " << setw(15) << cableBoxFeesTotal << endl;
              }
              else if (cableBoxes > 2 amp;amp; 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;
         }
   }
  

Комментарии:

1. Ваш фрагмент кода кажется сломанным…

2. По-видимому, в вашем коде отсутствует вызов функции feeFunction .

3. Это домашнее задание? Если это так, пожалуйста, пометьте ее как таковую.

4. Я отформатировал ваш код, пожалуйста, просмотрите его.

Ответ №1:

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

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

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

Комментарии:

1. Это моя вторая пользовательская функция, которую я выполнил. Инструктор заставил нас сделать это таким образом, я поищу другой способ сделать это сейчас. Спасибо

Ответ №2:

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

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

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

Комментарии:

1. cableBoxes устанавливается позже с помощью пользовательского ввода, поэтому оно будет не менее 2. Мне не нужно изменять глобальные значения, только локальную переменную cableBoxFeesTotal. После вызова функции мне нужно сохранить значение в локальной переменной, чтобы использовать в следующем разделе кода для определения промежуточного итога. Я просто не могу заставить ее сохранить значение в локальной переменной.

2. @Namawen, вы должны убедиться, что этот факт отражен в коде, который вы публикуете. Что касается решения, вы не используете оператор присваивания = для присвоения значения, возвращаемого из функции, каким-либо переменным в main.

Ответ №3:

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

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

сделайте это как:

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

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

Комментарии:

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