0
我有这样的代码,解码从命令防止值输入零作为第一个数字
if(arg && isdigit(arg[ 0 ]) {
/* Decode the input char from commands. */
if(cmd->digit_counter == 0) memset(cmd->next_chan_buffer, 0, 5);
cmd->next_chan_buffer[ cmd->digit_counter ] = arg[ 0 ];
cmd->digit_counter++;
cmd->frame_counter = cmd->delay;
/**
* Send an enter command if we type more digits than there are stations.
*/
if(cmd->digit_counter > 0 && (station_get_max_position(cmd->station) < 10)) {
commands_handle(cmd, ENTER, 0);
} else if(cmd->digit_counter > 1 && (station_get_max_position(cmd->station) < 100)) {
commands_handle(cmd, ENTER, 0);
} else if(cmd->digit_counter > 2) {
commands_handle(cmd, ENTER, 0);
}
}
这在小键盘数字键入的数字计数数和在一个盒子里写的数字输入字符,例如
|5|4|2|0|
欲防止第一计数位为0(或只接受1至9号)和第二,第三,...数字从0接受号 - 9
digits count 1 2 3 4
-------------------------------------------------
| only digits 1 to 9 | 0 to 9 | 0 to 9 | 0 to 9 |
-------------------------------------------------
感谢
OK,通过增加功能解决:
int first_digit(int num)
{
while(num >= 10) {
num = (num - (num % 10))/10;
}
return num;
}
if(arg && isdigit(arg[ 0 ]) {
/* Decode the input char from commands. */
if(cmd->digit_counter == 0) memset(cmd->next_buffer, 0, 5);
cmd->next_buffer[ cmd->digit_counter ] = arg[ 0 ];
if(first_digit(atoi(cmd->next_chan_buffer)) != 0) {
cmd->digit_counter++;
cmd->frame_counter = cmd->delay;
}
}