我是新来的,我希望你能帮我完成编程课我必须完成的任务。该任务是创建一个气候控制器,如果有> 22.2C°则冷却房间,当温度<18.5℃时将其加热,如果温度介于两者之间则不做任何事情。 我制定的准则是:
/*
Compile: make climate_control1
Run: ./climate_control1
*/
#include "base.h"
/*
Eine Klimaanlage soll bei Temperaturen unter 18.5 °C heizen, bei 18.5-22.2 °C nichts tun und bei Temperaturen ab 22.2 °C kühlen.
Entwickeln Sie eine Funktion zur Regelung der Klimaanlage, die abhängig von der Temperatur heizt, ausschaltet oder kühlt.
*/
enum TemperatureStage {
LOW_TEMPERATURE,
HIGH_TEMPERATURE
};
typedef int Degree; // int represents temperature in degree celsius
const Degree LOW_TEMPERATURE_BOUNDARY = 18.5; // interpret.: Temperature in degree celsius.
const Degree HIGH_TEMPERATURE_BOUNDARY = 22.2; // interpret.: Temperature in degree celsius.
//Degree -> Degree.
Degree climate_control(Degree degree);
void climate_control_test() {
check_expect_i(climate_control(LOW_TEMPERATURE_BOUNDARY),0);
check_expect_i(climate_control(HIGH_TEMPERATURE_BOUNDARY), 0);
check_expect_i(climate_control(10), LOW_TEMPERATURE_BOUNDARY);
check_expect_i(climate_control(20.6), 0);
check_expect_i(climate_control(33), HIGH_TEMPERATURE_BOUNDARY);
}
// regulate the temperature.
Degree climate_control(Degree degree) {
if (degree == LOW_TEMPERATURE_BOUNDARY) {
return 0;
} else if (degree < LOW_TEMPERATURE_BOUNDARY) {
return LOW_TEMPERATURE_BOUNDARY; }
else if (degree == HIGH_TEMPERATURE_BOUNDARY) {
return 0;
} else if (degree > HIGH_TEMPERATURE_BOUNDARY) {
return HIGH_TEMPERATURE_BOUNDARY; }
}
int main (void) {
climate_control_test();
return 0;
}
每次尝试编译时都会出现错误“控件到达非void函数的结尾”。我不知道它有什么问题。我需要说的是,在我3周前开始学习之前,我几乎没有编码经验。
答案 0 :(得分:1)
这是因为你的函数有一个可能的代码路径,让if在没有函数返回任何东西的情况下失效。从技术上讲,它应该是不可能的,但是编译器已经注意到了这种可能性,并且不会让你继续下去。你的功能应该更像这样:
Degree climate_control(Degree degree) {
if (degree == LOW_TEMPERATURE_BOUNDARY) {
return 0;
} else if (degree < LOW_TEMPERATURE_BOUNDARY) {
return LOW_TEMPERATURE_BOUNDARY; }
else if (degree == HIGH_TEMPERATURE_BOUNDARY) {
return 0;
} else if (degree > HIGH_TEMPERATURE_BOUNDARY) {
return HIGH_TEMPERATURE_BOUNDARY; }
return 0;
}
为什么编译器会这么想?如果一些脑死亡(或醉酒)程序员这样做,上述代码会发生什么:
const Degree LOW_TEMPERATURE_BOUNDARY = 18.5;
const Degree HIGH_TEMPERATURE_BOUNDARY = -22.2; //Notice the sign change?
现在您的climate_control
功能将失效。