gpt4 book ai didi

C错误: control reaches end of non void function

转载 作者:行者123 更新时间:2023-11-30 21:37:23 25 4
gpt4 key购买 nike

我是新来的,我希望你能帮助我完成编程课上必须做的作业。任务是创建一个气候控制系统,如果温度 >22.2C°,则为房间降温;如果温度 <18.5C°,则加热房间;如果温度介于两者之间,则不执行任何操作。我编写的代码是:

/*
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;
}

每次我尝试编译它时都会出现错误“控制到达非空函数的末尾”。我不知道这是怎么回事。我需要说的是,在三周前开始学习之前,我几乎没有任何编码经验。

最佳答案

这是因为您的函数有一个可能的代码路径,该路径会导致 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功能将会失效。

关于C错误: control reaches end of non void function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com