Написание 3 функций для преобразования футов и дюймов в метры и сантиметры в C++?
Я пытаюсь написать программу на 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;
}
3 ответа
У вас есть (как минимум) три проблемы: во-первых, вы изменяете аргументы, передаваемые 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;