当前位置: 代码迷 >> C语言 >> [求助]C语言循环里的小问题
  详细解决方案

[求助]C语言循环里的小问题

热度:121   发布时间:2007-10-23 20:19:35.0
[求助]C语言循环里的小问题

#include <stdio.h>
void main()
{ int a,num,kongge,qita;
char i;

a=0;
num=0;
kongge=0;
qita=0;
printf("请输入字符序列:");
fflush(stdin);
while(1)
{i=getchar();

if(i>='a'&&i<='z'||i>='A'&&i<='Z')
{a++;
continue;}
else if(i>='0'&&i<='9')
{num++;
continue;}
else if(i==32)
{kongge++;
continue;
}
// if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z')&&!(i>='0'&&i<='9'))
// {qita++;
// continue;

// }
if(i='\n')
break;

};

printf("\n这中字符中共有字母%d个\n数字%d个\n空格%d个\n其他字符%d个\n",a,num,kongge,qita);
}

这是用来计算用户输入一串字符后,把他输入的各种符号数量打印出来,用来算数字,字母和空格都没问题,可是其它的字符算不出来有多少个,
注销的是我想的写法,可是不行,有人能告诉我,我错在那里了吗,怎么改好呢?想了我一下午了。郁闷!

搜索更多相关的解决方案: C语言  

----------------解决方案--------------------------------------------------------

if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z')&&!(i>='0'&&i<='9'))
这里错了
应该是if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z')||!(i>='0'&&i<='9')))


----------------解决方案--------------------------------------------------------
回复:(小白II)[求助]C语言循环里的小问题
不行的这么改,只要把注销的加上,运行起来,就像个死循环一样,一直输入,也跳不出来,不知道为什么。
----------------解决方案--------------------------------------------------------
回复:(小白II)[求助]C语言循环里的小问题
char i;
else if(i==32)
你要是从键盘输入32就表示两个字符,那i就不能定义为CHAR I;应该是CHAR I[10];或将else if(i==32)改为
else if (i==' ')表示空格;

if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z')&&!(i>='0'&&i<='9'))你的意思是只要前面输入的i不满足前面的条件就执行该IF语句吧?那么假设你输入的i是9,则!(i>='0'&&i<='9')就等于0,
则!(i>='a'&&i<='z'||i>='A'&&i<='Z')&&0就等于1;
则i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z')&&!(i>='0'&&i<='9'),因为i=9,所以i!=32,所以IF的条件为真,既执行IF语句.与你的意图相反.应将IF语句改为if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z'||i>='0'&&i<='9')
----------------解决方案--------------------------------------------------------

else if(i!= 10&&i!=13)
{qita++;
continue;

}
else
break;

};
把你注释的那个改成这个;
你统计其它字符的时候,把回车和换行都给统计为其它字符,当然没有办法退出了!!
换行和回车的ASCII吗为10共和13,
在前面的基础上加上else if 把回车排除在外的所有其它字符,统计为其它字符
然后在那个的基础上,剩下的只有回车和换行了。所以可以退出了


----------------解决方案--------------------------------------------------------
if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z'||i>='0'&&i<='9')
最后再加半个括号.if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z'||i>='0'&&i<='9'))
----------------解决方案--------------------------------------------------------

同意楼上的算法


----------------解决方案--------------------------------------------------------
以下是引用cutboy在2007-10-23 21:57:33的发言:
if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z'||i>='0'&&i<='9')
最后再加半个括号.if(i!=32&&!(i>='a'&&i<='z'||i>='A'&&i<='Z'||i>='0'&&i<='9'))

它输入回车键会退出程序吗?还是直接算作其它字符,然后其它字符器在加一?
这个时候每个字符都是以ASCII吗的形式存储。。


----------------解决方案--------------------------------------------------------
谢谢声音,我试试看,刚开始学,还不太会,
----------------解决方案--------------------------------------------------------
哈哈成功了!谢谢大家帮忙!可以睡个好觉了!大家晚安!
----------------解决方案--------------------------------------------------------
  相关解决方案