static int Stuff(Color sn_color, Color *color, char *name, char *direction)
{
set_sensor_mode(sn_color, "COL-COLOR");
get_sensor_value(0, sn_color, color);
printf("%s_color is %d\n", name, *color);
if (*color == 3)
{
printf("turn %s\n", direction);
killMotors(0);
return 0;
}
return 1;
}
…
int DoPidLine;
if (rx_color <= 60)
DoPidLine = Stuff(sn_rx_color, &rx_color, "rx", "right")
else if (lx_color <= 60)
DoPidLine = Stuff(sn_lx_color, &lx_color, "lx", "left")
else
DoPidLine = 1;
if (DoPidLine)
pidLine(speed);
Последняя часть, начиная с «…», может быть одним оператором:
if (rx_color <= 60 ? Stuff(sn_rx_color, &rx_color, "rx", "right") :
lx_color <= 60 ? Stuff(sn_lx_color, &lx_color, "lx", "left" ) :
1)
pidLine(speed)
Другая альтернатива:
static void Stuff(Speed speed, Color sn_color, Color *color, char *name, char *direction)
{
if (name)
{
set_sensor_mode(sn_color, "COL-COLOR");
get_sensor_value(0, sn_color, &color);
printf("%s_color is %d\n", name, color);
if (color == 3)
{
printf("turn %s\n", direction);
killMotors(0);
return 0;
}
}
pidLine(speed);
}
…
if (rx_color <= 60)
Stuff(speed, sn_rx_color, &rx_color, "rx", "right")
else if (lx_color <= 60)
Stuff(speed, sn_lx_color, &lx_color, "lx", "left")
else
Stuff(speed, 0, 0, 0, 0);