#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()读后面的数字,不然你那个就是死循环