为什么受伤还是我?结果总不对!!
其实下面代码很简单的,就是想统计输入的字符类别(数字,英文及其它)。。。
可是每回都只有其他,而前两者总是为零!!请大侠帮帮忙。。。我想了好久了。。
#include<stdio.h>
main()
{ char c;
int charNO ,alaboNO,otherNO;
charNO=0;
alaboNO=0;
otherNO=0;
while(c=getchar()!='\n')
{
if( c>='a'&& c<='z'||c>='A'&&c<='Z')
charNO++;
else if((c>='0')&&(c<='9'))
alaboNO++;
else
otherNO++;
}
printf("%d",charNO);
printf("%d",alaboNO);
printf("%d\n",otherNO);
}
问题点数:0、回复次数:15Top
1 楼fierygnu(va_list)回复于 2003-08-01 22:48:35 得分 0
getchar返回的是int,定义int c就行了。Top
2 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-08-01 22:49:03 得分 0
受伤的总是你是因为你叫杨过Top
3 楼fierygnu(va_list)回复于 2003-08-01 22:49:45 得分 0
看漏了,这里
while(c=getchar()!='\n')
应该是
while((c=getchar())!='\n')
赋值操作符的优先级最低。Top
4 楼fireinsky(kakaru)回复于 2003-08-01 22:50:09 得分 0
#include<stdio.h>
main()
{ char c;
int charNO ,alaboNO,otherNO;
charNO=0;
alaboNO=0;
otherNO=0;
while((c=getchar())!='\n')
{
if( ((c>='a') && (c<='z')) || ((c>='A') && (c<='Z')))
charNO++;
else if((c>='0')&&(c<='9'))
alaboNO++;
else
otherNO++;
}
printf("%d",charNO);
printf("%d",alaboNO);
printf("%d\n",otherNO);
}
Top
5 楼Areslp(努力ING)回复于 2003-08-01 22:50:55 得分 0
while((c=getchar())!='\n')这样就可以了:)
Top
6 楼fireinsky(kakaru)回复于 2003-08-01 22:51:55 得分 0
好起怪, 都是f开头的:)Top
7 楼steedhorse(晨星)回复于 2003-08-01 22:52:15 得分 0
在拿不准优先级的情况下,一定要加括号——即使拿得准,加上也没有坏处。
while(c=getchar()!='\n')
应改为
while((c = getch()) != '\n')
if( c>='a'&& c<='z'||c>='A'&&c<='Z')
应改为:
if((c>='a'&& c<='z') || (c>='A'&&c<='Z'))Top
8 楼steedhorse(晨星)回复于 2003-08-01 22:54:44 得分 0
第二个也可以不改。Top
9 楼Cppasm(沧海一粟)回复于 2003-08-01 23:03:40 得分 0
while(c=getchar()!='\n')
这一行,注意运算符的优先级,把它改成while((c=getchar())!='\n')就OK了Top
10 楼direstrait(明天不是猪)回复于 2003-08-02 02:02:15 得分 0
#include<stdio.h>
#include<ctype.h>
int main()
{ char c;
int charNO ,alaboNO,otherNO;
charNO=0;
alaboNO=0;
otherNO=0;
while((c=getchar())!='\n')
{
if(isalpha(c))
charNO++;
else if(isdigit(c))
alaboNO++;
else
otherNO++;
}
printf("%5d\t",charNO);
printf("%5d\t",alaboNO);
printf("%5d\n",otherNO);
return 0;
}
用了两个宏,其实没有什么区别,只是提醒一下,如果优先及把握不是太准的话,记得加上括号,就不会有什么问题了.Top
11 楼fierygnu(va_list)回复于 2003-08-02 17:50:51 得分 0
大家应该注意int c;的问题。虽然在这个例子里不会出什么问题,但如果不注意,在某些场合会成为陷阱的。Top
12 楼WindsonZhL(风之子)回复于 2003-08-02 18:55:18 得分 0
(a=b)!=c 这样的式子正确吗?
它应该是表示,a=b 这个赋值过程成功则返回1,否则返回0;然后判断c是否等于1(0)。
一般来说 a=b 都返回1 。Top
13 楼happycock(SSWW)回复于 2003-08-02 19:19:38 得分 0
a=b返回的是什么,你最好亲自试一试
#include <stdio.h>
void main()
{
int a = 5, b;
printf("%d",b = a);
}
你要知道,可以这样赋值的
a=b=c=0;Top
14 楼fierygnu(va_list)回复于 2003-08-02 22:06:18 得分 0
WindsonZhL(风之子) 基本概念不清。Top
15 楼xiaoyi20()回复于 2003-08-02 22:27:21 得分 0
楼主的问题 fireinsky(喜子)解决了。我看可以结贴了。Top




