c语言怎样才能输入一行字符,以回车作为结束标志,分别统计出大写字母,小写字母,空格,数字和其他字符的

#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0,f=0;
char ch;
scanf("%c",&ch);
while(ch!='CR')
{
if(ch>='A'&&ch<='Z')
a=a+1;
else if(ch>='a'&&ch<='z')
b=b+1;
else if(ch==32)
c=c+1;
else if(ch>='0'&&ch<='9')
d=d+1;
else
f=f+1;
scanf("%c",&ch);
}
printf("a=%d,b=%d,c=%d,d=%d,f=%d\n",a,b,c,d,f);
}
这样写为什么不对呢?跪求大神指教啊

因为字符串中有空格所以不能使用scanf函数来接收键盘输入的字符串,因为scanf遇到空格和回车结束输入,所以需要使用gets来接收键盘输出的字符串,接着依次判断并累加,最后输出即可。

参考代码:

#include <stdio.h>
int main() {
int a=0,b=0,c=0,d=0,f=0,i;
char ch[100];
gets(ch); 
for(i=0;ch[i]!='\0';i++)
{
if(ch[i]>='A'&&ch[i]<='Z')
    a=a+1;
else if(ch[i]>='a'&&ch[i]<='z')
    b=b+1;
else if(ch[i]==32)
c=c+1;
else if(ch[i]>='0'&&ch[i]<='9')
    d=d+1;
else 
f=f+1;
}
printf("a=%d,b=%d,c=%d,d=%d,f=%d\n",a,b,c,d,f);
return 0;
}
/*
asdfASDF ADSFDASGasdfads3214325a df
a=12,b=14,c=2,d=7,f=0
*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-14
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0,f=0;
char ch; //这个是一个字符
scanf("%c",&ch); //即使你把ch声明成了一个字符串数组 scanf 遇到空格 就截断了
while(ch!='CR') //虽然你while了 即便ch 是字符串数组 但是没有后移 CR改为换行
{
if(ch>='A'&&ch<='Z')
a=a+1;
else if(ch>='a'&&ch<='z')
b=b+1;
else if(ch==32)
c=c+1;
else if(ch>='0'&&ch<='9')
d=d+1;
else
f=f+1;
scanf("%c",&ch);
}
printf("a=%d,b=%d,c=%d,d=%d,f=%d\n",a,b,c,d,f);
}追问

那应该怎么改呢?小弟刚学,不懂啊

追答

123ASDasd &&*^%$
a=3,b=3,c=1,d=3,f=6
Press any key to continue

#include
void main()
{
int i=0,a=0,b=0,c=0,d=0,f=0; //声明变量i用以循环
char ch[80]="\0"; //声明字符串数组 并初始化
gets(ch); //用gets函数获得输入内容 包括空格
while(ch[i]!='\0') //不等于\0
{
if(ch[i]>='A'&&ch[i]='a'&&ch[i]='0'&&ch[i]<='9')
d=d+1;
else
f=f+1;
i++; //循环变量自加
}
printf("a=%d,b=%d,c=%d,d=%d,f=%d\n",a,b,c,d,f);
}

本回答被提问者和网友采纳
第2个回答  2012-03-26
题目要求的是输入一串字符串,而你并没有一个一个去判断是什么。下面是代码,希望可以帮助到你。

#include <iostream>
#include <cstring>
using namespace std;
void main()
{
char string[30];
int character=0,number=0,space=0,other=0;
int i=0;
cin.get(string[0]);
while (string[i++]!='\n')
{
cin.get(string[i]);
//i++;
}
i=0;
while(string[i]!='\n')
{ if (string[i]>='0'&&string[i]<='9') number++;
else if ((string[i]>='A'&&string[i]<='Z')||(string[i]>='a'&&string[i]<='z')) character++;
else if(string[i]==' ') space++;
else other++;
i++;
}
cout<<"字母个数"<<character<<endl;
cout<<"数字个数"<<number<<endl;
cout<<"空格个数"<<space<<endl;
cout<<"其它个数"<<other<<endl;
}
第3个回答  2012-03-26
while(ch!='CR')
//改为:
while(ch!='\n')
第4个回答  2012-03-26
'CR'应该是字符串吧,问题是你声明存放是各变量,只能存一个数,必须声明数组存放字符串