2015-01-26 3 views
0

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

Это мой код: Когда я запустил его, значения, которые я получаю от displayFinalData, выводят как 0 вместо значений, которые я ожидаю (что должно быть любым преобразованием и т. Д.).

#include <iostream> 

using namespace std; 

int main() 
{ 
    int numInEuros = 0; 
    char answer = 'Y'; 

    double sumEuro = 0; 
    double priceEuro = 0; 
    int number = 0; 

    while ((answer == 'Y') || (answer == 'y')) 
    { 
     void processAPrice(); 
     processAPrice(); 

     void calculateSum(double priceInEuros, double& sumInEuros); 
     calculateSum(priceEuro, sumEuro); 

     cout << "\nDo you wish to continue? (Y/N): "; 
     cin >> answer; 

     number += 1; 
    } 

    void displayFinalData(double sumInEuros, int number); 
    displayFinalData(sumEuro, number); 

    system("pause"); 
    return 0; 
} 

void processAPrice() 
{ 
    double pricePounds; 
    double priceEuro; 

    void getPriceInPounds(double& priceInPounds); 
    getPriceInPounds(pricePounds); 

    void convertPriceIntoEuros(double priceInPounds, double& priceInEuros); 
    convertPriceIntoEuros(pricePounds, priceEuro); 

    void showPriceInEuros(double priceInPounds, double priceInEuros); 
    showPriceInEuros(pricePounds, priceEuro); 
} 

void getPriceInPounds(double& priceInPounds) 
{ 
    cout << ("\nEnter price in pounds: \x9C"); 
    cin >> priceInPounds; 
} 

void convertPriceIntoEuros(double priceInPounds, double& priceInEuros) 
{ 
    double conversionRate = 0.82; 
    priceInEuros = (priceInPounds/conversionRate); 
} 

void showPriceInEuros(double priceInPounds, double priceInEuros) 
{ 
    cout << ("\nThe Euro value of \x9C") << priceInPounds << " is EUR " << priceInEuros << "\n"; 
} 

void calculateSum(double priceInEuros, double& sumInEuros) 
{ 
    sumInEuros += priceInEuros; 
} 

void displayFinalData(double sumInEuro, int number) 
{ 
    cout << "\nThe total sum is: EUR " << sumInEuro << "\n"; 
    cout << "\nThe average is: EUR " << (sumInEuro/number) << "\n\n"; 
} 
+0

Откуда вы получили представление о размещении объявлений функций внутри функций? 'void showPriceInEuros (double priceInPounds, double priceInEuros);' Это не технически неправильно, но технически неудобно и практически никогда не делается. Объявления функций обычно выходят за пределы всех функций (перед самим телом функции и перед любым использованием функции). – PaulMcKenzie

+0

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

+0

Это загромождает код, а другие читают ваше сообщение. Просто объявите функцию снаружи - компилятор сообщит вам, если вы передадите недопустимый параметр. – PaulMcKenzie

ответ

1

Вы объявили priceEuros переменной отдельно в функции processAPrice() и обновляется после пользователь вводит цены в фунтах, но переменная priceEuro в основной() остается нетронутым, и сохраняет свой приращением sumEuro на 0.

If вы передадите переменную priceEuros в main для функции processAPrice(), она будет работать

void processAPrice(double& priceInEuros) 
{ 
    double pricePounds; 

    void getPriceInPounds(double& priceInPounds); 
    getPriceInPounds(pricePounds); 

    void convertPriceIntoEuros(double priceInPounds, double&  priceInEuros); 
    convertPriceIntoEuros(pricePounds, priceInEuros); 

    void showPriceInEuros(double priceInPounds, double priceInEuros); 
    showPriceInEuros(pricePounds, priceInEuros); 
} 
+1

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

0

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

Для переменных, которые вы хотите разделить между функциями, необходимыми для их создания global, т. Е. Объявлять их вне сферы действия любой функции.

+0

Это решение, однако, в моей спецификации задачи оно указывает только на использование параметров: \ Your guess it correct yet. –

+0

Я предлагаю использовать передаваемые переменные по ссылке, если они должны быть разделены и изменены, а не с использованием глобальных переменных. –

+0

@ b4027184 Затем передайте переменную от 'main' (как ссылку) на функции, требующие переменную. –

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