#c #computer-science
#c #информатика
Вопрос:
В настоящее время я работаю над домашним заданием для моего курса информатики I, и я новичок в C . однако, когда я компилировал программу, она сказала, что у нее слишком много аргументов для функции ‘void results()’
может кто-нибудь, пожалуйста, объяснить, как я могу исправить эту проблему. Ваше время будет оценено по достоинству.
Ниже приведено описание назначения
Мне нужно создать программу, которая реализует функции для преобразования температуры из одной шкалы в соответствующее значение в другой. Используя F для представления температуры по Фаренгейту и C для представления температуры по Цельсию, следующие формулы используются для преобразования между двумя температурными шкалами
F = 1.8C 32 C = F-32/1.8
программа должна запрашивать у пользователя шкалу и градусное измерение начальной температуры и отображать как эквиваленты указанной температуры по Фаренгейту, так и по Цельсию, округленные до двух знаков после запятой. Если предоставлены неподходящие входные данные для шкалы или температуры, программа должна отобразить соответствующее сообщение об ошибке и завершить выполнение без отображения каких-либо результатов. Подходящие входные данные для шкалы температур будут зависеть от способа получения информации; подходящими температурами являются любые значения, большие или равные абсолютному нулю, то есть -459,67 F или -273,15 C.
Основная функция программы может содержать только объявления переменных и вызовы функций. Для обработки данных, как минимум, ваша программа должна правильно использовать соответствующую функцию для каждой из следующих задач, хотя вы можете включить столько дополнительных функций, сколько пожелаете:
1. Отобразите краткий обзор и / или набор инструкций, объясняющих программу пользователю
2. Попросите пользователя ввести используемую температурную шкалу
3. Попросите пользователя ввести начальное значение температуры
4. Преобразуйте температуру по Фаренгейту в Цельсий
5. Преобразуйте температуру по Цельсию в градусы Фаренгейта
6. Отобразите результаты
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
// Prototype
void overView();
void results();
char tempScale();
float tempReading();
float convertFtoC(float);
float convertCtoF(float);
int main(){
overView ();
cout << setprecision (2) << fixed;
float degree = tempReading();
char scale = tempScale();
float fahrenheit, celsius;
if(scale == 'F'){
celsius = convertFtoC(degree);
fahrenheit = degree;
}
else if (scale == 'C'){
fahrenheit = convertCtoF(degree);
celsius = degree;
}
else{
cout << "***Error: Invalid temperature Scale Please try again!" << endl;
return 0;
}
results(fahrenheit, celsius);
return 0;
}
// this function was build to give an overview to the user explaining the program
void overView(){
cout << "This program will convert a temperature reading provided in" << endl;
cout << "either Fahrenheit or Celsius to the other measurement scale." << endl;
cout << "------------------------------------------------------------" << endl;
cout << endl;
}
// this function was build to ask the user to chose the temperature scale
char tempScale(){
char scale;
cout << "Please chose the temperature scale that you wish to use (F = Fahrenheit; C = Celsius): ";
cin >> scale;
return scale;
}
// this function was build to ask the user to enter the temperature reading in degree
float tempReading(){
float degree;
cout << "Please enter your temperature reading (in degrees): ";
cin >> degree;
return degree;
}
// This function was build to converts a Fahrenheit temperature to celsius
float convertFtoC(float fahrenheit){
float celsius;
celsius = (fahrenheit - 32) / 1.8;
return celsius;
}
// This function was build to converts a Celsius temperature to Fahrenheit
float convertCtoF(float celsius){
float fahrenheit;
fahrenheit = 1.8 * (celsius 32);
return fahrenheit;
}
// This function will display the results to the user
void results(float fahrenheit, float celsius){
cout <<"Your temperature reading converts as follows:" << endl;
cout << "Fahrenheit: " << fahrenheit << endl;
cout << "Celsius: " << celsius << endl;
}
Ответ №1:
В вашем объявлении прямой функции измените void results();
на void results(float, float);
. Ошибка в основном гласит: «вы определили функцию без параметров, однако вы вызываете ее с двумя параметрами».
Ответ №2:
В вашем прототипе нет параметров, поэтому C думает, что вы делаете что-то неправильно (он не ожидает ввода).
Изменение:
// Prototype
void overView();
void results();
Для
// Prototype
void overView();
void results(float fahrenheit, float celsius);
Это должно быть исправлено! C имеет тенденцию относиться к вашему прототипу более серьезно, чем к вашей реализации. Это также происходит в C.
Комментарии:
1. «C , как правило, относится к вашему прототипу более серьезно, чем к вашей реализации», что вы имеете в виду, относится более серьезно ? Сигнатуры функций в объявлении и определении должны точно совпадать, вот и все.
2. Вот что я имею в виду. Если вам будет предоставлен выбор, чтобы сделать ваш прототип неправильным или ваш вызов функции, он всегда выберет ваш вызов функции. Это то, что я подразумеваю под «более серьезно», но я вижу, как это могло бы ввести в заблуждение.