#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. Я опубликовал раздел, где я вызываю функцию, и код после него, где мне нужно значение из функции, для вычисления промежуточного итога.