2014-11-20 3 views
1

Итак, я пытаюсь написать базовую программу на C++, чтобы получить стоимость чего-либо, количество и вычислить итоговое/промежуточное количество в трех разных функциях, а затем отобразить его в main().Передача переменных через функции в C++

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

#include <iostream> 

using namespace std; 

int price(int cost) 
{ 
cout << "What is the cost of the robot?" << endl; 
cin >> cost; 

if (cost < 1000) //validation 
{ 
    cout << "Cost is too low. Setting to $1000." << endl; 
    cost = 1000; 
    return cost; 
} 

return cost; 
} 

int numRobots(int number) 
{ 
cout << "How many robots are being ordered?" << endl; 
cin >> number; 

if (number < 50) //validation 
{ 
    cout << "We only sell in quantities of 50 or more. Setting quantity to 50." << endl; 
    number = 50; 
    return number; 
} 

return number; 
} 

void grandTotal(int cost, int number, double &subtotal, double &total) 
{ 
subtotal = (cost * number); 
total = (subtotal * .07) + subtotal; 
} 

int main() 
{ 
int cost = 0; 
int number = 0; 
double subtotal = 0; 
double total = 0; 

price(cost);`enter code here` 
numRobots(number); 
grandTotal(cost, number, subtotal, total); 

cout << cost; //testing 
cout << number; //outputs 
cout << total; //of 
cout << subtotal; //variables 

system("pause"); 
return 0; 
+3

Либо вам нужно передать переменную по ссылке, либо использовать возвращаемое значение функции. Все ваши функции возвращают значения, но вы никогда не используете их для назначения чего-либо, например, вы должны сделать «cost = price (cost)», чтобы вернуть возвращаемое значение в 'cost'. – CoryKramer

+0

Я подумал, что это что-то в этом роде; не присваивая значение чему-либо. Спасибо за быстрый ответ! – Siyrinx

+1

Что делать, если вы вводите линейку бюджетных роботов? –

ответ

4

price(cost);

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

Вы делаете то же самое с numRobots.

В качестве альтернативы вы можете передать параметр по ссылке и изменить его, но imo, это менее легко понять.

tl; dr;

Вы должны делать int cost = price(); (нет никаких оснований для функции взять Int в качестве параметра)

+0

Ух, вот и все. Я немного ржавчивый на C++, взял курс на него год назад, взяв это для обновления, и мы только сейчас переходим к функциям. Спасибо за помощь! – Siyrinx

0

Использование возвращаемого значения или передать параметр по ссылке или указателю.

1. int result = numRobots (number);

2. INT numRobots (INT & число) {} .....

0

Вы должны передать переменные по ссылке:

int cost = 0; 
int number = 0; 
price(cost); 
numRobots(number); 

void price(int& cost) 
{ 
    .... 
} 

void numRobots(int& number) 
{ 
    .... 
} 

Обратите внимание на тип void возврата в этом случае!

В качестве альтернативы, вы можете использовать return значение:

int cost = price(cost); 
int number = numRobots(number); 

Но этот метод не имеет особого смысла, так как переменная передается в качестве параметра методов является такой же, как тот, в котором хранится значение, возвращаемое !

+0

Мне нравится, как вы скопировали код OP, но оставили в сломанном «\' введите код здесь \ ". –

+0

@LightnessRacesinOrbit Это называется сосредоточением внимания на проблеме! ;) (Исправлено сейчас.) – CinCout

+0

... Возможно, я поклялся, что избавился от этого «введите код здесь». Ну хорошо, первый раз плакат, долгое время lurker. >.> – Siyrinx

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