C++ if函数的另一种解决方案,用于减少写入
您好,我正在寻找一个解决方案,以一个功能写得少,混乱的代码:D 问题是:是否有其他函数或IF函数的其他用法来编写更少的代码?因为我需要写多达50行的IF函数 添加一个代码,说明我是如何操作的,还有其他方法吗?因为我需要它,函数才能工作,我从mqtt获取值,difrent值需要在程序的内存中C++ if函数的另一种解决方案,用于减少写入,c++,arduino,C++,Arduino,您好,我正在寻找一个解决方案,以一个功能写得少,混乱的代码:D 问题是:是否有其他函数或IF函数的其他用法来编写更少的代码?因为我需要写多达50行的IF函数 添加一个代码,说明我是如何操作的,还有其他方法吗?因为我需要它,函数才能工作,我从mqtt获取值,difrent值需要在程序的内存中 if (TESTAS == 30 && soilmoisturepercent == TESTAS) { digitalWrite(LED_PIN, HIGH); // turn on
if (TESTAS == 30 && soilmoisturepercent == TESTAS) {
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
}
else if (TESTAS == 29 && soilmoisturepercent == TESTAS) {
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
}
else if (TESTAS == 28 && soilmoisturepercent == TESTAS) {
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
}
具有相同的内部功能:
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
因此,您可以将其放在它自己的函数中,以简化为:
if (TESTAS == 30 && soilmoisturepercent == TESTAS) {
myFunction();
}
else if (TESTAS == 29 && soilmoisturepercent == TESTAS) {
myFunction();
}
else if (TESTAS == 28 && soilmoisturepercent == TESTAS) {
myFunction();
}
其中myFunction是:
void myFunction() {
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
}
然后你可以看到这三种情况非常相似:
if(soilmoisturepercent == TESTAS) {
if (TESTAS == 30) {
myFunction();
}
else if (TESTAS == 29) {
myFunction();
}
else if (TESTAS == 28) {
myFunction();
}
}
然后可以使用|
或运算符再次简化:
if(soilmoisturepercent == TESTAS) {
if (TESTAS == 30 || TESTAS == 29 || TESTA == 28) {
myFunction();
}
}
另一个选项是使用小于或大于运算符来比较范围,例如,如果希望任何TESTAS
等于或小于30。e、 g:
if (TESTAS <= 30) {
myFunction();
}
if(TESTAS您可以使用开关盒
switch(TESTAS){
case 30:
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
break;
case 29:
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
break;
case 28:
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
break;
default:
your_fuction();
}
您不需要在所有3种情况下都使用soilmoisturepercent==TESTAS
。组合:if(TESTAS>=28&&TESTAS Ok感谢您让我知道:)等等,你的3个代码片段有什么不同?要回答这个问题:是的,当然有一种方法可以用一个if
语句来代替它。这在逻辑上等同于soilmoisturepercent==TESTAS&&TESTAS>=28&&TESTAS,这对你来说应该不是很明显的
switch(TESTAS){
case 30:
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
break;
case 29:
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
break;
case 28:
digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
delay(5000);
digitalWrite(LED_PIN, LOW);
break;
default:
your_fuction();
}