能不能帮忙看看哪里错了(哭

#include<stdio.h>
int main()
{
    int y=0,k=0,s=0,q=0;
    char c;
    printf("请输入一串字符:");
    c=getchar();
    while(c!='\n')
    {
        if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
        y++;
        else
        if(c>='0'&&c<='9')
        s++;
        else
        if(c==' ')
        k++;
        else
        q++;
    }
    printf("其中英文字母个数为%d,空格个数为%d,数字个数为%d,其他为%d",y,k,s,q);
    return 0;
}

首先c应该是字符数组,不应该是一个字符。还有如果用while的话就可以定义一个i,然后while (c[i] != '\n'),然后里面每次判断都用c[i],最后i++;还有判断的时候最好加上大括号,不然像这个if和else的位置就混了。而且字符数组结束符为'\0'。有//的行有改动。

改错:

#include<stdio.h>
int main()
{
    int y=0,k=0,s=0,q=0,i=0; //
    char c[100];    //
    printf("请输入一串字符:");
    scanf("%s", c); //
    while(c[i]!='\0') //
    {
        if((c[i]>='a'&&c[i]<='z')||(c[i]>='A'&&c[i]<='Z')){ //
        	y++;
        } 
        else{
        	if(c[i]>='0'&&c[i]<='9'){ //
       	 		s++;
        	}	 
        	else{
        		if(c[i]==' '){ //
        			k++;
    			}
        		else{
        			q++;
    			}
    		}
    	}
        i++; //
    }
    printf("其中英文字母个数为%d,空格个数为%d,数字个数为%d,其他为%d",y,k,s,q);
    return 0;
}

 

1. 把 c=getchar() 放到while循环里面第一行

2. 将char c 初始化成一个不是‘\n’的值

以上两部可实现你的需求

#include<stdio.h>
int main()
{
    int y = 0, k = 0, s = 0, q = 0;
    char c = '\0';    //初始化为非'\n'的值
    printf("请输入一串字符:");
   
    while (c != '\n')
    {
        c = getchar();    //这句放到循环里面
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
            y++;
        else
            if (c >= '0' && c <= '9')
                s++;
            else
                if (c == ' ')
                    k++;
                else
                    q++;
    }
    printf("其中英文字母个数为%d,空格个数为%d,数字个数为%d,其他为%d", y, k, s, q);
    return 0;
}

 

  while(c!='\n')
    {
        if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
        y++;
        else
        if(c>='0'&&c<='9')
        s++;
        else
        if(c==' ')
        k++;
        else
        q++;

 

c=getchar();
    }

 

你前面只读了第一个数字,添加c=getchar()读后面的数字,不然你那个就是死循环