我如何在 C 中将 switch 与结构一起使用
How do I use switch with structs in C
您好,我有以下来自 here 的代码片段:
void handleGenieEvent(struct genieReplyStruct *reply) {
if (reply->cmd != GENIE_REPORT_EVENT) {
printf("Invalid event from the display: 0x%02X\r\n", reply->cmd) ;
return;
}
/**/
if (reply->object == GENIE_OBJ_KEYBOARD) {
if (reply->index == 0) // Only one keyboard
calculatorKey(reply->data);
else
printf("Unknown keyboard: %d\n", reply->index);
} else
if (reply->object == GENIE_OBJ_WINBUTTON) {
/**/
if (reply->index == 1) { // Clock button on main display
//do smth
} else
if (reply->index == 2) {
//do smth
} else
if (reply->index == 0) { // Calculator button on clock display
//do smth
} else
printf("Unknown button: %d\n", reply->index);
} else
printf("Unhandled Event: object: %2d, index: %d data: %d [%02X %02X %04X]\r\n",
reply->object, reply->index, reply->data, reply->object, reply->index, reply->data);
}
而且我想知道是否可以在这里使用 switch,尤其是 index
我试过这个:
switch (reply->index)
case 0:
//do smth
case 1:
//do smth
case 2:
//do smth
但这不起作用。
switch (reply->index)
{
case 0:
//do smth
break;
case 1:
//do smth
break;
case 2:
//do smth
break;
default:
printf("Unknown button: %d\n", reply->index);
break;
}
会起作用。
请注意,您的示例应在函数输入时检查 reply
-指针:
void handleGenieEvent (struct genieReplyStruct *reply)
{
if (NULL == reply)
{
// report error
return;
}
else
{
// ...
}
}
在这种情况下,您应该使用方括号和 break 语句:
switch (reply->index){ <---bracket
case 0:
//do smth
break;
case 1:
//do smth
break;
case 2:
//do smth
break;
}<---bracket
如果您想要与上面 if-else 代码片段相同的功能,则需要 break 语句。例如,如果您错过了中断并遇到了案例 0,案例 1 和案例 2 也会执行。
您好,我有以下来自 here 的代码片段:
void handleGenieEvent(struct genieReplyStruct *reply) {
if (reply->cmd != GENIE_REPORT_EVENT) {
printf("Invalid event from the display: 0x%02X\r\n", reply->cmd) ;
return;
}
/**/
if (reply->object == GENIE_OBJ_KEYBOARD) {
if (reply->index == 0) // Only one keyboard
calculatorKey(reply->data);
else
printf("Unknown keyboard: %d\n", reply->index);
} else
if (reply->object == GENIE_OBJ_WINBUTTON) {
/**/
if (reply->index == 1) { // Clock button on main display
//do smth
} else
if (reply->index == 2) {
//do smth
} else
if (reply->index == 0) { // Calculator button on clock display
//do smth
} else
printf("Unknown button: %d\n", reply->index);
} else
printf("Unhandled Event: object: %2d, index: %d data: %d [%02X %02X %04X]\r\n",
reply->object, reply->index, reply->data, reply->object, reply->index, reply->data);
}
而且我想知道是否可以在这里使用 switch,尤其是 index
我试过这个:
switch (reply->index)
case 0:
//do smth
case 1:
//do smth
case 2:
//do smth
但这不起作用。
switch (reply->index)
{
case 0:
//do smth
break;
case 1:
//do smth
break;
case 2:
//do smth
break;
default:
printf("Unknown button: %d\n", reply->index);
break;
}
会起作用。
请注意,您的示例应在函数输入时检查 reply
-指针:
void handleGenieEvent (struct genieReplyStruct *reply)
{
if (NULL == reply)
{
// report error
return;
}
else
{
// ...
}
}
在这种情况下,您应该使用方括号和 break 语句:
switch (reply->index){ <---bracket
case 0:
//do smth
break;
case 1:
//do smth
break;
case 2:
//do smth
break;
}<---bracket
如果您想要与上面 if-else 代码片段相同的功能,则需要 break 语句。例如,如果您错过了中断并遇到了案例 0,案例 1 和案例 2 也会执行。