str[i]>='0'&&str[i]<='9为什么要<=9 str[i]-'0'为什么要减去0?

#include <stdio.h>

#include <string.h>

int main()

{

   int i,sum=0,len;

   char str[100];

   gets(str);

   len=strlen(str);

   for(i=0;i<len;i++)

   {

       if(str[i]>='0'&&str[i]<='9')

       {

           sum=sum+str[i]-'0';

       }

   }

   printf("%d\n",sum);

   return 0;

}

<=9 ,表示包含9在内,如果< 9 ,9就排除在外了。

字符 ’0‘ 和数字 0 在计算机内不同的ascii值,str[i]-'0'就是将相应的数字字符转换为数字。

'0'与0差0x30,'0'即16进制即0x30;

'0' ~ '9'即0x30~0x39,

0 = '0' - '0';

1 = '1' - '0';

str[i]>='0' && str[i]<='9'表示这个字符是一个数字字符,'0'在ASCII码中的值是48,所以,如果要得到0这个数,就需要减去'0'(也就是减去48),'1'-'0'=49-48 = 1,这样得到这个字符所对应的实际的数。

如有帮助,请采纳一下,谢谢。