C语言程序流程的不解和疑问

为什么在i=2的时候while(s[i]);没有为假跳出来呢?

#include <stdio.h>
int main()
{    char *s="120119110";
    int n0,a,b,c,i;
    n0=a=b=c=i=0;
    do{
    switch(s[i++])
    {default :c++;
    case '0':n0++;
    case '1':a++;
    case '2':b++;
    }
    }while(s[i]);
printf("n0=%d,a=%d,b=%d,c=%d\n",n0,a,b,c);    
return 0;
}

我认为的在i为2的时候s[i]值为0那么while就为假跳出循环了呀
为什么答案最后是n0=3,a=8,b=9,c=1

i为2的时候s[i]值为'0',是字符0不是数字0,在while条件不会转换成false