Я пытаюсь написать программу на C ++, которая состоит из 3 функций: одна для ввода, одна для расчета и одна для вывода. Предполагается, что программа принимает входные данные в футах и дюймах, а затем выводит преобразованное значение метров и сантиметров обратно пользователю. Я думаю, что что-то не так с вызовом по ссылке, так как я все еще учусь правильно его использовать, в любом случае вот код
#include<iostream>
using namespace std;
void input(double feet , double inches);
void calc(double &feet , double &inches);
void output(double &feet , double &inches);
void main()
{
double feet1 , inches1;
char ans;
do
{
input(feet1,inches1);
calc(feet1,inches1);
output(feet1,inches1);
cout<<"Would you like to calculate again? y/n : ";
cin>>ans;
}
while(ans == 'y' || ans == 'Y');
}
void input(double feet , double inches)
{
cout<<"Enter feet : ";
cin>>feet;
cout<<"Enter inches : ";
cin>>inches;
}
void calc(double &feet , double &inches)
{
double meters , centimeters;
meters = feet * 0.3048;
centimeters = inches * 2.54;
}
void output(double &feet , double &inches)
{
calc(feet,inches);
cout<<"Converted feet to metres : "<<metres;
cout<<"Converted inches to centimeters : "<<centimeters;
}
У вас есть (как минимум) три проблемы: во-первых, вы изменяете аргументы, передаваемые input
функции, но так как аргументы передаются по значению (т.е. копируются), вы изменяете только копии. Вы должны передать аргументы по ссылке (что вы делаете с другими функциями, даже если они вам не нужны).
Вторая проблема заключается в том, что в вашем calc
функция, которую вы объявляете meters
а также centimeters
в качестве локальных переменных. Как только функция возвращает эти переменные, выходит из области видимости и на них нельзя ссылаться откуда-либо еще.
Третья проблема, и это должно привести к ошибке компиляции, заключается в том, что вы пытаетесь использовать metres
(проверьте орфографию, это не то же самое, что в calc
) а также centimeters
из выходной функции, и там эти переменные не объявлены.
То, как вы соединяете ноги с метрами и дюймами с сантиметрами, приведет вас к путанице: для различных преобразований у вас получатся дюймы больше 12 или сантиметры больше 100.
На вашем месте я бы поддерживал только две переменные — метры и футы — и применял бы преобразование между ними. Тогда вы можете вообще отказаться от ссылок так как функции преобразования будут возвращать единичные значения.
Затем, чтобы преобразовать футы в футы и дюймы, вы можете использовать
(int)feet
для части ног
(feet - (int)feet) * 12
для части дюймов.
void input(double feet , double inches);
Поскольку вы хотите изменить футы и дюймы, вы можете использовать ссылки, как вы делали в другой функции.
void calc(double &feet , double &inches)
В этой функции вы меняете локальные «метры» и «сантиметры», но они теряются при выходе из функции.
Также вы ничего не делаете с ногами и дюймами, поэтому вам не нужны ссылки.
Вы можете изменить это следующим образом:
void calc(const double feet , const double inches, double &meters, double ¢imeters)
И теперь вы можете вызывать эту функцию с «входными» данными (футы, дюймы) и «выходными данными» (метры, сантиметры).
В функции вывода я не уверен, хотите ли вы вызывать calc внутри нее или это ошибка (так как функция calc также вызывается в цикле main / while)
но в выходной функции нужно указать метр и сантиметр. ИЛИ так, как есть, calc даст вам необходимые данные, но не вызывайте calc в цикле do-while.
другие вещи:
#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
Одного раза достаточно.
#include<iostream>
#include<iostream>
using namespace std;