情况:有5个通道,它们被分配给5个传感器中的任何一个(可以更改运行时)。可以将传感器1和2分配给传感器1。 但是,无论分配如何,我想要的是,第二个开关中的所有传感器情况仅对完整的“For”循环周期执行一次。 我写了下面的代码,但它不起作用。谁能告诉解决方案?
for(uChannel = 0; uChannel < 5; uChannel++) {
switch(uChannel)
{
case 0: sensor= calibrate.channel1;
break;
case 1: sensor= calibrate.channel2;
break;
case 2: sensor= calibrate.channel3;
break;
case 3: sensor= calibrate.channel4;
break;
case 4: sensor= calibrate.channel5;
break;
default:
}
switch(sensor)
{
case 1: function(a,b);
break;
case 2: function(c,b);
break;
case 3: function(d,b);
break;
case 4: function(e,b);
break;
case 5: function(f,b);
break;
default
}
}
答案 0 :(得分:1)
您可以编写第二个开关盒的功能,并从第一个开关的每个盒子调用它。例如:
void executeSensor(int sensor){
switch(sensor)
{
case 1: function(a,b);
break;
case 2: function(c,b);
break;
case 3: function(d,b);
break;
case 4: function(e,b);
break;
case 5: function(f,b);
break;
default:
break;
}
}
以这种方式打电话:
for(uChannel = 0; uChannel < 5; uChannel++) {
switch(uChannel)
{
case 0: sensor= calibrate.channel1;
executeSensor(sensor)
break;
case 1: sensor= calibrate.channel2;
executeSensor(sensor)
break;
case 2: sensor= calibrate.channel3;
executeSensor(sensor)
break;
case 3: sensor= calibrate.channel4;
executeSensor(sensor)
break;
case 4: sensor= calibrate.channel5;
executeSensor(sensor)
break;
default:
break;
}
}
答案 1 :(得分:0)
在上面的代码中有两个编译错误。
首先你应该解决这个问题。默认情况应以break
语句和;
for(uChannel = 0; uChannel < 5; uChannel++) {
switch(uChannel)
{
case 0: sensor= calibrate.channel1;
break;
case 1: sensor= calibrate.channel2;
break;
case 2: sensor= calibrate.channel3;
break;
case 3: sensor= calibrate.channel4;
break;
case 4: sensor= calibrate.channel5;
break;
default:
break;
}
switch(sensor)
{
case 1: function(a,b);
break;
case 2: function(c,b);
break;
case 3: function(d,b);
break;
case 4: function(e,b);
break;
case 5: function(f,b);
break;
default:
break;
}
}