c语言循环终止问题及条件

#include
main()
{ char *s="120119110";
int n0,n1,n2,nn,i;
n0=n1=n2=nn=i=0;
do{
switch(s[i++])
{ default : nn++;
case '0' : n0++;
case '1' : n1++;
case '2' : n2++;
}
} while(s[i]);
printf("n0=%d,n1=%d,n2=%d,nn=%d\n",n0,n1,n2,nn);
}

大佬们,这个do while语句在s[2]时为什么不终止循环呢?要怎样才终止?

首先先明确一个问题,就是s是一个字符数组,它里面存储的是字符,实际上里面存储的是ascii码,s[2]存储的是字符'0',转化成ascii码是十进制的
48是是16进制的30,也就是说想要实现你的功能,while(s[i]);可以写成while(s[i]-'0');或者写成while(s[i]-48);或者写成while(s[i]-0x30);

你好,你可以这样设置终止条件,

while(s[2])
{
break;
}

这样,当满足这个条件就可以退出程序了

C 中字符串会以\0结尾,虽说\0的ASCII码是0,但未分配内存的部分,还要看具体的编译器实现
通常的保守写法是
while(c!='0')