C错误:控制到达非void函数的结束

时间:2015-11-05 20:32:00

标签: c

我是新来的,我希望你能帮我完成编程课我必须完成的任务。该任务是创建一个气候控制器,如果有> 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周前开始学习之前,我几乎没有编码经验。

1 个答案:

答案 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功能将失效。