2013-04-04 87 views
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; 
     } 
} 

回答

0

你可以像这样,而不是使用ISDIGIT执行检查()。

if(arg && arg[0] >= '1' && arg[0] <= '9') { // only accept '1' through '9' 

从“0”到“9”中的人物总是在用C相邻顺序,因此这张支票你需要什么。

相关问题