Проблема со слишком большим количеством аргументов для функционирования

#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. Вот что я имею в виду. Если вам будет предоставлен выбор, чтобы сделать ваш прототип неправильным или ваш вызов функции, он всегда выберет ваш вызов функции. Это то, что я подразумеваю под «более серьезно», но я вижу, как это могло бы ввести в заблуждение.