统计字符串中的英文字母,数字等,结果不出来但不报错

结果运行不出来


#include
using namespace std;
int main(){
char c[10];
int y=0,k=0,s=0,i,q=0;
for(i=0;i<10;i++){
    while((c[i]=getchar())!='\n')
{if((c[i]>='a'&&c[i]<='z')||(c[i]>='A'&&c[i]<='Z')) y++;
else if(c[i]==' ') k++;
else if(c[i]>='0'&&c[i]<='9') s++;
else q++;
}
}
cout<<"英文字母个数为"<"空格数个数为"<"数字个数为"<"其它字符个数为"<return 0;
}

你原来的while((c[i]=getchar())!='\n') 并不是判断从键盘得到的c[i] !=回车,而是判断(c[i]=getchar()) 这个动作或者说完整的表达式,而完整的表达式永远不等于回车!估计是你笔误了
所以这里要改写

#include<iostream>
using namespace std;
int main(){
    char c[10];
    int y=0,k=0,s=0,i,q=0;

    for(i=0;i<10;i++){
        c[i]=getchar();
        if(c[i] !='\n')
        {
            if((c[i]>='a'&&c[i]<='z')||(c[i]>='A'&&c[i]<='Z')) y++;
            else if(c[i]==' ') k++;
            else if(c[i]>='0'&&c[i]<='9') s++;
            else q++;
        }
        else
            break;
    }
    cout<<"英文字母个数为"<<y<<endl; 
    cout<<"空格数个数为"<<k<<endl; 
    cout<<"数字个数为"<<s<<endl; 
    cout<<"其它字符个数为"<<q<<endl; 
    return 0;
}

或者换成下面这样:

#include<iostream>
using namespace std;
int main(){
    char c[10];
    printf("input now:");
    gets(c);
    
    int y=0,k=0,s=0,i,q=0;
    
    while(*c!='\0')
    {
        if((*c>='a' && *c<='z')||(*c>='A' && *c<='Z')) 
            y++;
        else if(*c==' ') 
            k++;
        else if(*c >='0' && *c<='9') 
            s++;
        else 
            q++;
    }
    
    cout<<"英文字母个数为"<<y<<endl; 
    cout<<"空格数个数为"<<k<<endl; 
    cout<<"数字个数为"<<s<<endl; 
    cout<<"其它字符个数为"<<q<<endl; 
    return 0;
}

第8行,只要输入的不是'\n',i就一直为0,导致死循环了,把while循环去掉,直接赋值试试

有帮助的话,请点采纳该答案~