Ошибка довольно очевидна, вы вызываете функцию не так, как она должна быть.Функция принимает 4 параметра, а вы передаете только один.
Но это только ваша ПЕРВАЯ ошибка.ВТОРОЕ, аргументы функции в том виде, в каком они объявлены прямо сейчас, создадут локальную копию параметров:
double convertTemp (double tempF, double tempR, double tempC, double tempK);
Это означает, что внутри тела функции изменения любой из этих переменныхне распространяется на переменные, объявленные в main, которые вы использовали для вызова convertTemp()
.Я говорю, что во время вызова функции в стеке создаются еще 4 переменные, а их значения копируются из переменных, которые вы отправили в функцию.
Существует два подхода к решению этой проблемы:
Первый , немного более сложный для понимания, если вы ничего не знаете оуказатели.При таком подходе, чтобы изменить исходные переменные main, вам нужно изменить сигнатуру функции, чтобы вместо нее получать указатели памяти:
void convertTemp (double * tempF, double * tempR, double * tempC, double *tempK);
, и тело функции тоже нужно изменить, чтобы соответствовать прототипу, объявленному в начале файла:
void convertTemp (double* tempF, double* tempR, double* tempC, double* tempK)
{
//Statements
*tempR = (*tempF - 32) + 491.67;
*tempC = (*tempF - 32) * 100/180;
*tempK = *tempC + 273.16;
}
Обратите внимание, что новая сигнатура функции не возвращает никакого значения (т. Е. void ).В этом нет необходимости, поскольку вы будете работать непосредственно с переменными, передаваемыми main()
.
On main()
, вам следует вызывать такую функцию:
fahrenheit = obtainTemp();
convertTemp(&fahrenheit, &rankine, &celsius, &kelvin);
- Второй подход , поскольку вы новичок, и вам, вероятно, будет легче его понять, это объявить 3 функции, по одной на каждое преобразование, которое вам нужно сделать:
double convertR(double value)
{
return (value - 32) + 491.67;
}
double convertC(double value)
{
return (value - 32) * 100/180;
}
double convertK(double value)
{
return value + 273.16;
}
Затем на main()
вы бы назвали их как:
fahrenheit = obtainTemp();
rankine = convertR(fahrenheit);
celsius = convertC(fahrenheit);
kelvin = convertK(fahrenheit);
printResult(fahrenheit, rankine, celsius, kelvin);