【问题标题】:Comparing high and low values to call a function比较高值和低值以调用函数
【发布时间】:2013-03-24 18:19:14
【问题描述】:

我想将温度传感器中的电流与我在程序中使用结构设置的上限值进行比较。如果温度传感器的值超过当前上限我只想printf 声明。

这段代码有什么问题,无论当前温度是多少,它都不会打印出printf 语句。请假定所有必要的头文件、定义等都在程序中说明。

它作为一个整体运行良好,但我不明白为什么我不能得到一个简单的printf 命令来显示!!请假设所有需要的定义都已完成,并且所有typedefs 都已做出相应的定义。

这是我的结构

struct temperatureChannel_t { //set a structure that encompasses all of the follow elements in an array
    temperature_t temperatureArray;
    temperature_t temperatures[MAXSAMPLES];
    temperature_t currentTemperature;
    temperature_t lowLimit;
    temperature_t highLimit;
    temperature_t minTemperature;
    temperature_t maxTemperature;

};

struct temperatureChannel_t temperatureChannel[MAXCHANNELS];

这是我如何初始化当前上限

void initializeTemperatureSubsystem()
{
    currentInsertionPoint = 0;
    for(int chID = 0; chID < MAXCHANNELS; chID++)
    {
            srand(time(NULL));
            for(int i = 1; i < MAXSAMPLES; i++)
            {   
                    temperatureChannel[chID].temperatures[i] = rand()%100;
            }
            temperatureChannel[chID].lowLimit = 50;
        temperatureChannel[chID].highLimit = 100;
        temperatureChannel[chID].currentTemperature = 75;

        averageIsValid = FALSE; //NEW line  
    }

}

这是我设置当前温度的方式,首先是调用函数

setCurrentTemperature(CH1, temperatureSensor1Reading);

然后是函数

temperature_t setCurrentTemperature(int channelID, temperature_t temperature)
{
    return temperatureChannel[channelID].currentTemperature;
}

首先,我使用我正在使用的当前频道调用该函数

compareHighLimit(CH1);

那么这里是不会打印出 printf 命令的函数

void compareHighLimit (int channelID)
{
    if (temperatureChannel[channelID].currentTemperature > temperatureChannel[channelID].highLimit)
            printf("you have activated the high alarm!!");  
}

【问题讨论】:

  • 打印compareHighLimit() 函数中的值(if(...) 语句中的条件),以获得您认为应该使printf() 起作用的输入。这些值是您所期望的吗?
  • 如果我使用 compareHighLimit(CH1, CH1Reading) 然后将 CH1 读取到我的函数中并从那里比较它会触发它......但这不是我练习的重点......我应该能够仅使用单个 CH1 值确定 CH1 读数,该值应分别从结构中调用其当前温度。
  • 我明白了。当条件不符合您的要求时,一个好的做法是通过打印值来查看它实际比较的内容。正如下面的答案所示,这样做可能会告诉您您从未设置过温度。 :)
  • 你是对的 d0rmlife....我意识到我只返回 currentTemperature 而不设置它...谢谢!

标签: c function structure


【解决方案1】:

您的 set temp 函数实际上并未设置值:

temperature_t setCurrentTemperature(int channelID, temperature_t temperature)
{
    // you need to set the data here, not just return the existing  value
    return temperatureChannel[channelID].currentTemperature;
}

【讨论】:

  • 你太棒了 chue ......非常感谢你的回应......我做了必要的改变,现在它可以工作了......非常感谢你跨度>
【解决方案2】:

您似乎从未设置过温度。你说你打电话

setCurrentTemperature(CH1, temperatureSensor1Reading);

我认为,这应该将CH1 的温度设置为temperatureSensor1Reading。然而,这个函数似乎并没有改变温度:

temperature_t setCurrentTemperature(int channelID, temperature_t temperature)
{
    return temperatureChannel[channelID].currentTemperature;
}

您似乎混淆了setCurrentTemperaturegetCurrentTemperature 的代码?

【讨论】:

  • 在这方面你是对的猛禽......我相信我的教授看了我的代码并告诉我在我想知道为什么时改变它(因为他告诉我们将该函数定义为“get”最初)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
相关资源
最近更新 更多