我想知道我的while 循环为什么跳不出,我已经用了字符串结束标志'/0'啊

#include<stdio.h>
#include<string.h>
int main()
{
char ch[50];
int i=1,b,c=0;
gets(ch);
b=strlen(ch);
if(ch[0]>='a'&&ch[0]<='z'||ch[0]>='A'&&ch[0]<='Z'||ch[0]=='_'){
while(ch[i]=getchar(),ch[i]!='\0'){

if(ch[i]>='a'&&ch[i]<='z'||ch[i]>='A'&&ch[i]<='Z'||ch[i]=='_'||ch[i]>='0'&&ch[i]<='9')
c++;
i++;

    }
      if(c==b-1)
      printf("yes");
      else
      printf("no");
  }
    else
     printf("no");

return 0;

}

while后面的括号里应该把逗号改成且(&&)


#include<stdio.h>
#include<string.h>
int main()
{
    char ch[50],a;
    int i = 0, b, c = 0;
    gets_s(ch);
    b = strlen(ch);
    if ((ch[0] >= 'a' && ch[0] <= 'z') || (ch[0] >= 'A' && ch[0] <= 'Z') || ch[0] == '_') {
        a = getchar();
        while (ch[i] == a&& ch[i] != '\0') {
            getchar();
            if ((ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z') || ch[i] == '_' || (ch[i] >= '0' && ch[i] <= '9'))
                c++;
            i++;
            a = getchar();
        }
        if (c == b)
            printf("yes");
        else
            printf("no");
    }
    else
        printf("no");
    return 0;
}