求助大神。C语言题目:有一篇文章,共有3行文字,每行有个80字符.要求分别统计出其中英文大写字母、小写

#include<stdio.h>
#include<string.h>
int main()
{
char str[3][2];
int space=0,letter=0,digit=0,other=0;
int i=0,j;
gets(str[i][j]);
while(str[i][j]!='\0')
for(;i<=2;i++)
{
for(j=0;j<=1;j++)
if((str[i][j]<='Z'&&str[i][j]>='A')||(str[i][j]<='z'&&str[i][j]>='a'))
letter++;
else if (str[i][j]<='9'&&str[i][j]>='0')
digit++;
else if (str[i][j]==' ')
space++;
else
other++;
}
printf("space=%3d,letter=%3d,digit=%3d,other=%3d",space,letter,digit,other);
return 0;
}
这样编有何错误请指出,本人将感激不尽

1、gets(str[i][j]); 这一句中j没赋值,而且把字符串送给一个字符型二维数组的元素是行不通
的,通不过编译;

你可以改成gets(str[i]),但是只能输入一行,因为gets()虽然不会将空格识别
为'\0',但它把回车视为'\0';

这一句最好改成for(;i<=2;gets(str[i]),i++);,这里分号别忘了,表示for的循环是
空语句,实际起作用的是第三项里的表达式,结束后i=2,下一句for语句要把i
再次赋0。
2、while(str[i][j]!='\0') 这一句中j同样没赋值,通不过编译;

你可以将这一句去掉,把下面for(j=0;j<=1;j++)这一句改成
for(j=0;j<=1&&str[i][j]!='\0';j++)。
程序变为:

#include<stdio.h>
#include<string.h>
int main()
{
char str[3][2];
int space=0,letter=0,digit=0,other=0;
int i=0,j;
for(i=0;i<=2;gets(str[i]),i++); //这一句变了
/*while(str[i][j]!='\0')*/ //这一句去掉了
for(i=0;i<=2;i++) //这一句i重新赋0
{
for(j=0;j<=1&&str[i][j]!='\0';j++) //这一句变了
if((str[i][j]<='Z'&&str[i][j]>='A')||(str[i][j]<='z'&&str[i][j]>='a'))
letter++;
else if (str[i][j]<='9'&&str[i][j]>='0')
digit++;
else if (str[i][j]==' ')
space++;
else
other++;
}
printf("space=%3d,letter=%3d,digit=%3d,other=%3d",space,letter,digit,other);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-23
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][80];
int space=0,letter=0,digit=0,other=0;
int i=0,j;
for(i=0;i<3;i++)
{
printf("第%d行:\n",i+1);
gets(str[i]);
}
// while(str[i][j]!='\0')
for(i=0;i<3;i++)
for(;i<=2;i++)
{
for(j=0;j<=80 && str[i][j] != '\0';j++)
{
if((str[i][j]<='Z'&&str[i][j]>='A')||(str[i][j]<='z'&&str[i][j]>='a'))
letter++;
else if (str[i][j]<='9'&&str[i][j]>='0')
digit++;
else if (str[i][j]==' ')
space++;
else
other++;
}
}
printf("space=%3d,letter=%3d,digit=%3d,other=%3d",space,letter,digit,other);
return 0;
}
第2个回答  2013-04-23
#include<string.h>
int main()
{
char str[3][2];
int space=0,letter=0,digit=0,other=0;
int i=0,j;
gets(str[i][j]);//别用gets ,况且要用,里面要填写的也是字符串,比如str或者str[i]不能str[i][j]
while(str[i][j]!='\0')
for(;i<=2;i++)
{
for(j=0;j<=1;j++)
if((str[i][j]<='Z'&&str[i][j]>='A')||(str[i][j]<='z'&&str[i][j]>='a'))
letter++;
else if (str[i][j]<='9'&&str[i][j]>='0')
digit++;
else if (str[i][j]==' ')
space++;
else
other++;
}
printf("space=%3d,letter=%3d,digit=%3d,other=%3d",space,letter,digit,other);
return 0;
}

第3个回答  2013-04-23
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][84];
int upperletter=0,caseletter=0;
int i=0,,j = 0;
for (i = 0; i< 3;i++)
{
for (j = 0; j < 80; j++)
{
gets(str[i][i]);

if (str[i][j] == 13)
{
str[i][j] = '\0';
break;
}
}
str[i][80] = '\0';
}
i = 0;

for(;i<=2;i++)
{
j = 0;
while (str[i][j] != '\0')
{
if((str[i][j]<='Z'&&str[i][j]>='A'))
{
upperletter++;

}
else if ((str[i][j]<='z'&&str[i][j]>='a'))
{
caseletter++;
}
}
}
printf("upperletter=%3d,caseetter=%3d",upperletter, caseletter);
return 0;
}本回答被网友采纳
第4个回答  2013-04-23
应该有文件的读操作吧,#include<iostream.h>这个库里,还得判断文件是否打开,最后德关闭文件,读一个判断一个就行,不用用二维数组
相似回答