下面是我的switch语句代码:
switch(pin)
{
case 1:
break;
case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11:
case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20:
case 21: case 22: case 23: case 24:case 25:case 26:case 27:case 28:case 29: case 30: case 31:
case 32: case 33: case 34: case 35:
dataOut[pin-2] = 1;
DAQmxWriteDigitalLines(taskHandleOut,1,1,10.0,DAQmx_Val_GroupByChannel,dataOut,NULL,NULL);
break;
default:
break;
在上文中,情况2-35将被分组在一起,对于这些情况,我的意思是,当pin
等于2-35时,将执行特定任务。
我想知道上面的代码是否有效。我没有在switch语句中看到案例分组。任何类似的多个案例分组的网络链接都表示赞赏。也许有更好的方法可以这样做,而不是分组多个案例。
虽然使用if-check if (pin >= 2 && pin <= 35)
可以更好地服务于您的案例,但通常会将案例标签分组。
gcc / clang / tinycc甚至还有语法糖:
switch(pin){
case 2 ... 35: /*nonstandard GNU extension; note well the whitespace*/
};
是的,这绝对没问题,虽然我写的
if (pin >= 2 && pin <= 35){
dataOut[pin-2] = 1;
DAQmxWriteDigitalLines( ...
}
如果我是你。如果您只使用gcc作为编译器,那么您也可以使用case ranges。
这是有效的。它被称为穿透,这就是你必须把break
s分开case
s的原因。也就是说,如果你没有break
,那么你的案件之后的指示将会被执行。像
int i = 1;
switch(i) {
case 1:
cout<<1<<endl;
case 2:
cout<<"nope!\n";
}
这将输出
1
nope!
因为在break
之前没有case 2:
。
但在你的情况下你也可以这样做
if (pin >= 2 && pin <= 35) {
dataOut[pin-2] = 1;
DAQmxWriteDigitalLines(taskHandleOut,1,1,10.0,DAQmx_Val_GroupByChannel,dataOut,NULL,NULL);
}
是的你可以。 C ++为switch
案例语句提供了支持。因此,除非你在break;
结束时提供case:
,否则控制会进入下一个案例,允许你完全按照你所描述的开关进行操作。有些编译器允许一次性描述多个case语句,但是对于便携式C ++,只需提供每个没有break;
的情况就可以了,例如:
switch(pin)
{
case 1:
break;
case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:
case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17:
case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25:
case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33:
case 34: case 35:
/* do what you need with pins 2 - 35 */
dataOut[pin-2] = 1;
DAQmxWriteDigitalLines (taskHandleOut, 1, 1, 10. 0,
DAQmx_Val_GroupByChannel, dataOut, NULL, NULL);
break;
default:
break;
}
现在任何情况下2-35
都会执行你想要的陈述:
dataOut[pin-2] = 1;
DAQmxWriteDigitalLines (taskHandleOut, 1, 1, 10. 0,
DAQmx_Val_GroupByChannel, dataOut, NULL, NULL);
这是有效的代码,但我宁愿在你的情况下使用默认值,特别是当你计划在其他情况下使用其他数字时。 default将在if / else语句中与else一样使用。对于没有指定大小写的每个数字,都会调用默认值。