Написание 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;
}

0

Решение

У вас есть (как минимум) три проблемы: во-первых, вы изменяете аргументы, передаваемые input функции, но так как аргументы передаются по значению (т.е. копируются), вы изменяете только копии. Вы должны передать аргументы по ссылке (что вы делаете с другими функциями, даже если они вам не нужны).

Вторая проблема заключается в том, что в вашем calc функция, которую вы объявляете meters а также centimeters в качестве локальных переменных. Как только функция возвращает эти переменные, выходит из области видимости и на них нельзя ссылаться откуда-либо еще.

Третья проблема, и это должно привести к ошибке компиляции, заключается в том, что вы пытаетесь использовать metres (проверьте орфографию, это не то же самое, что в calc) а также centimeters из выходной функции, и там эти переменные не объявлены.

3

Другие решения

То, как вы соединяете ноги с метрами и дюймами с сантиметрами, приведет вас к путанице: для различных преобразований у вас получатся дюймы больше 12 или сантиметры больше 100.

На вашем месте я бы поддерживал только две переменные — метры и футы — и применял бы преобразование между ними. Тогда вы можете вообще отказаться от ссылок так как функции преобразования будут возвращать единичные значения.

Затем, чтобы преобразовать футы в футы и дюймы, вы можете использовать

(int)feet

для части ног

(feet - (int)feet) * 12

для части дюймов.

0

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;
0
По вопросам рекламы [email protected]