龙盘湖国际幼儿园:简单的问题?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 22:31:05
main()
{
void countchar(char arr[20]);
char arr[20];
clrscr();
printf("put the char:\n");
gets(arr);
countchar(arr);

}
void countchar(char arr[20])
{
int i,ch=0,num=0,k=0,m=0;
for(i=0;arr[i]!='\0';i++)
{
if(arr[i]==' ')k=k+1;
else
if(48<=arr[i]<=57)num=num+1;
else
if((65<=arr[i]<=90)||(97<=arr[i]<=122))ch=ch+1;
else
m=m+1;
}
printf("%d,%d,%d,%d",k,num,ch,m);
return;
}目的是数字符,数字,空格的数目。
为什么不能实现?只有数字有结果,其他都是零。???

主要是(48<=arr[i]<=57)和
(65<=arr[i]<=90)||(97<=arr[i]<=122) 不对

我来解释一下:
1.比如说arr[i]=32(是空格)那么48<=arr[i]明显是假那么值为0而当然有0<=57,所以(48<=arr[i]<=57)为真则整个为真显然不符合你的本意.

2.或者arr[i]=80(为'P')那么48<=arr[i]是真而当然有1<=57,所以(48<=arr[i]<=57)为真则整个为真显然也不符合你的本意.

综合1.和2.可知无论arr[i]等于什么(48<=arr[i]<=57)恒为真当然只有数字有值,且等于总字符数

(65<=arr[i]<=90)||(97<=arr[i]<=122)
这是不对的,应该分开写,如:
(65<=arr[i]&&arr[i]<=90)||(97<=arr[i]&&arr[i]<=122)

修改后:
#include<stdio.h>
main()
{
void countchar(char arr[20]);
char arr[20];
printf("put the char:\n");
gets(arr);
countchar(arr);
}
void countchar(char arr[20])
{
int i,ch=0,num=0,k=0,m=0;
for(i=0;arr[i]!='\0';i++)
{
if(arr[i]==' ')k=k+1;
else
if(48<=arr[i]&&arr[i]<=57)num=num+1;
else
if((65<=arr[i]&&arr[i]<=90)||(97<=arr[i]&&arr[i]<=122))ch=ch+1;
else
m=m+1;
}
printf("%d,%d,%d,%d",k,num,ch,m);
return;
}