Как напечатать функцию void после оператора cout?

Я пытаюсь распечатать вывод функции после того, как мои значения будут отправлены в функцию. Оператору cout нужна строка, но я не уверен, как я могу вернуть строку из моей функции reduce_fraction, сохраняя при этом правильность математических расчетов. В моей функции add_fraction вы увидите, что я просто хочу напечатать добавленную дробь, а затем уменьшенную дробь прямо под ней. Компилятор не возвращает ошибок, но на выходе отображается только ответ «Неверная дробь».

#include <iostream>
#include <string>

using namespace std;


 void reduce_fraction (int top, int bottom)
 {
    for (int i = top * bottom; i > 1; i--) {  
            if ((top % i == 0) && (bottom % i == 0)) {  
         bottom /= i;  
            top /= i;  
    }  

     }
}

void add_fraction (int numerator, int numerator2, int denominator, int              
denominator2)
{
int top;
int bottom;
top = numerator2 * denominator + denominator2 * numerator;
bottom = denominator2 * denominator;

cout << "Improper Fraction -> ";
cout << top << "/" << bottom << endl;
cout << "Simplified Fraction -> ";
reduce_fraction(top, bottom);
}


int main()
{

int numerator;
int denominator;
int numerator2;
int denominator2;
char operation;

cout << "Input the numerator: ";
cin >> numerator;

cout << "Input the denominator: ";
cin >> denominator;

cout << "Input the numerator2: ";
cin >> numerator2;

cout << "Input the denominator: ";
cin >> denominator2;

cout << "Input the operation: ";
cin >> operation;

if (operation == '+'){
    add_fraction(numerator, numerator2, denominator, denominator2);
}

return 0;   
}

person austinscode    schedule 03.02.2015    source источник
comment
Вы не можете вернуть ничего из reduce_fraction; вот что значит иметь функцию void.   -  person Scott Hunter    schedule 03.02.2015
comment
Да, но могу ли я вытащить верхнюю и нижнюю переменные, которые я отправил из add_fraction, в reduce_fraction, а затем как-то распечатать результаты?   -  person austinscode    schedule 03.02.2015
comment
Вы могли бы, если бы вы передали их по ссылке.   -  person Scott Hunter    schedule 03.02.2015


Ответы (1)


Используйте ссылку, чтобы отразить изменения в top и bottom и напечатать их в своей функции add_fraction после вызова reduce_fraction.

void reduce_fraction ( int & top, int & bottom)
{                         ~~~        ~~~
 //...
}

Потом,

reduce_fraction(top, bottom);
cout << top << "/" << bottom << endl; 
person P0W    schedule 03.02.2015
comment
По-прежнему нужно что-то, чтобы на самом деле, вы знаете, напечатать их. - person Scott Hunter; 03.02.2015
comment
Ааа, это сработало. Таким образом, символ & существенно обновляет целые числа в зависимости от того, что произошло в функции? - person austinscode; 03.02.2015
comment
@austinscode: это было бы слишком просто. В этом контексте персонаж объединяется, чтобы произвести int&. Это ссылка на int. В частности, это означает, что int& top не является самой переменной, а просто новым именем для первой переменной, переданной в reduce_fraction. - person MSalters; 03.02.2015