Написание 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 &centimeters)

И теперь вы можете вызывать эту функцию с "входными" данными (футы, дюймы) и "выходными данными" (метры, сантиметры).

В выходной функции я не уверен, хотите ли вы вызывать 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;
Другие вопросы по тегам