C语言题目:“有一篇文章,共有3行文字,每行有个80字符.要求分别统计”请问到底哪里出错了

#include<stdio.h>
#include<string.h>
int main()
{
char str[3][80];
char c;
int i,j;
int up=0,low=0,num=0,n=0,other=0;
for(i=0;i<=2;i++)
gets(str);
for(i=0;i<3;i++)
for(j=0;j<80;j++)
{
c=str[i][j];
if(c==' ')

n=n+1;
else if(c<='Z'&c>='A')
up=up+1;
else if(c<='z'&c>='a')
low=low+1;
else if(c<='9'&c>='0')
num=num+1;
else other=other+1;
}
printf("up=%d,low=%d,num=%d,n=%d,other=%d
\n",up,low,num,n,other);
return 0;
}
有一篇文章,共有3行文字,每行有个80字符.要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数.中间是不是一定要{
c=str[i][j];
if(c==‘\0’)break; 为什么?

str是个字符串数组,gets是获取字符串
改成gets(str[i])
&改成&&
因为每行屏幕最多显示81个字符,而最后一个字符都是\0意味着字符串的结束。所以要加这个判断来识别是不是读到字符串结尾了。追问

上面是没有加if(c==‘\0’)break;  的结果  为什么会这样   

追答

你下面的结果也不对把,空格没有啊,因为字符串的格式是****\0\0\0\0\0……一直补到结束为止,所以你有很多other

追问

嗯 写上了个空格嘛 暂且忽略空格的事 为什么没有那句break的时候会那个样子

追答

你定义了每个字符串都是长度是80对吧,总长度是240,如果你第一个字符串可见长度只是10的话,那么后面70个位置都会是\0,所以你第一个的所有的总数加起来是240,而空格和\0的分辨不是很好。你可以直接读取你的str[0][50]这个字符(即第一行第51个字符,尽管你看不见它 )和"\0"作比较,结果应该是相等的 。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-15
&符号是与运算,是二进制运算中的一种,你用这个符号用错了,应该用:
&&表示的是逻辑运算符且的意思,

符号要弄明白呀
第2个回答  2012-12-15
条件判断要用&&而不是&
还有 gets(str[i])而不是gets(str)

一个字符串是以'\0'结尾的,碰到'\0'说明这个字符串结束了,没有必要再继续往后查找字符
加上你说的判断是为了防止每行你不输入满80个字符(好像是79个,因为要留一个给'\0' )
第3个回答  2012-12-15
只需要用几个if进行判断就可以了
相似回答