c语言中这两个条件有什么不同

来源:百度知道 编辑:UC知道 时间:2024/04/28 23:00:07
题目是键盘输入一串字符,判断字符有几个,数字有几个,符号有几个,空格有几个。
我自己些的,结果调试出来的程序是:
main()
{
char string[100];
int i,a,b,c,f,e;
gets(string);
a=b=c=f=0;
i=0;
do
{
e=string[i];
if (47<e&&e<58)a=a+1;
else if(64<e&&e<91)b=b+1;
else if(96<e&&e<123)b=b+1;
else if(e==32)c=c+1;
else f=f+1;
i++;
}while ((e=string[i])!='\0');
printf("%d,%d,%d,%d",a,b,c,f);
}
中间两个FOR语句的循环条件我改成
if (47<e<58)a=a+1;
else if(64<e<91)b=b+1;
else if(96<e<123)b=b+1;
输出的结果就是错误的。请问这两个循环条件有什么区别吗?还是其他有什么问题?

if (47<e<58)a=a+1;
这个条件,
如果 e=5; 47<e 为假,假等于 0; 0<58 为真。
如果 e=47; 47<e 为假,假等于 0; 0<58 为真。
如果 e=50; 47<e 为真,真等于 1; 1<58 为真。
如果 e=58; 47<e 为真,真等于 1; 1<58 为真。
如果 e=60; 47<e 为真,真等于 1; 1<58 为真。
所以 (47<e<58) 总为 真。

if (47<e&&e<58)a=a+1;
如果 e=5; 47<e 为假,e<58 真;结果假
如果 e=47; 47<e 为假,e<58 真;结果假
如果 e=50; 47<e 为真,e<58 真; 结果真。
如果 e=58; 47<e 为真, e<58假; 结果假
如果 e=60; 47<e 为真,e<58假; 结果假

其它类推。

#include <stdio.h>
int main()
{ int c,zimu,shuzi,qita;
zimu=shuzi=qita=0;
printf("请输入一串字符");
while((c=getchar())!='\n'){
if(c>='a' && c<='z' || c>='A' && c<='Z')
zimu++;
else if(c>='0' && c<='9')
shuzi++;
else
qita++;}
printf("字母有%d个 数字有%d个 其他有%d个"