新手求教这个错在哪

w3562163 2011-05-28 08:39:28
#include<stdio.h>
#define N 3
#define M 30
main()

{

char ch[N][M+1];
int i,j;
int upp,low,dig,spa,oth;
upp=low=dig=spa=oth=0;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
gets(ch[i][j]);
}

for(i=0;i<N;i++)
{
for(j=0;j<M&&ch[N][M]!='\0';j++)
{
if(ch[i][j]>='A'&&ch[i][j]>='Z')
upp++;
else if (ch[N][M]>='a'&&ch[N][M]<='z')
low++ ;
else if (ch[N][M]>='0'&&ch[N][M]<='9')
dig++ ;
else
spa++ ;

}
printf("%d\n",upp);
printf("%d\n",low);
printf("%d\n",dig);
printf("%d\n",spa);

}


}

...全文
144 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
麦田守望者92 2011-05-29
  • 打赏
  • 举报
回复
改为 gets(&ch[i][j]);
yangdelong0000 2011-05-29
  • 打赏
  • 举报
回复
ch[i][j]的基类型是一维数组 他的值不能赋给字符类型的数据
改为ch[i][j]=getchar();就可以了。
但调试十分的不方便,因为getchat只能在敲回车,将一个数据送入内存中,也就是说你的程序必须每输入一个数据,敲一下回车,重复90次。你的程序中还有几个小错误,以下是我改过的程序,你与原来的比较一下
就知道哪里错了
#include<stdio.h>
#define N 3
#define M 30
void main()

{

char ch[N][M+1];
int i,j,k=1;
int upp=0,low=0,dig=0,spa=0,oth=0;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
ch[i][j]=getchar();

}
}

for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
if(ch[i][j]>='A'&&ch[i][j]<='Z')
upp++;
else
if (ch[i][j]>='a'&&ch[i][j]<='z')
low++ ;
else
if (ch[i][j]>='0'&&ch[i][j]<='9')
dig++ ;
else
spa++ ;

}

}
printf("%d\n",upp);
printf("%d\n",low);
printf("%d\n",dig);
printf("%d\n",spa);


}
如果你想要一次输入90个数据
下面的程序可以完成 注意是一次性输入 输入期间不要敲回车 否则回车也会被当做其他数据送入内存中
#include<stdio.h>
#define N 3
#define M 30
void main()

{

char ch[N][M+1];
int i,j,k=1;
int upp=0,low=0,dig=0,spa=0,oth=0;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
scanf("%s",&ch[i][j]);
}
}

for(i=0;i<N;i++)
{
for(j=0;j<M&&j!='\0';j++)
{
if(ch[i][j]>='A'&&ch[i][j]<='Z')
upp++;
else
if (ch[i][j]>='a'&&ch[i][j]<='z')
low++ ;
else
if (ch[i][j]>='0'&&ch[i][j]<='9')
dig++ ;
else
spa++ ;

}

}
printf("%d\n",upp);
printf("%d\n",low);
printf("%d\n",dig);
printf("%d\n",spa);


}
MichaelBomb 2011-05-29
  • 打赏
  • 举报
回复
#include<stdio.h>
#define N 3
#define M 30
main()

{

char ch[N][M+1];
int i,j;
int upp,low,dig,spa,oth;
upp=low=dig=spa=oth=0;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
gets(ch[i][j]); //gets(&ch[i][j])
}

for(i=0;i<N;i++)
{
for(j=0;j<M&&ch[N][M]!='\0';j++)
{
if(ch[i][j]>='A'&&ch[i][j]>='Z')
upp++;
else if (ch[N][M]>='a'&&ch[N][M]<='z') //(ch[i][j]>='a'&&ch[i][j]<='z')
low++ ;
else if (ch[N][M]>='0'&&ch[N][M]<='9')// 同上
dig++ ;
else
spa++ ;

}
printf("%d\n",upp);
printf("%d\n",low);
printf("%d\n",dig);
printf("%d\n",spa);

}
luckydog101 2011-05-29
  • 打赏
  • 举报
回复
gets()是字符串输入函数,getchar()才是单个字符输入函数,
“if(ch[i][j]>='A'&&ch[i][j]>='Z')”明显不对啊,
printf()语句上面的括号也不对。。。


Defonds 2011-05-29
  • 打赏
  • 举报
回复
gets()
yingzhi9 2011-05-29
  • 打赏
  • 举报
回复
呵呵,我调试了一下,有两个错误,
1. gets(&ch[i][j]);
2.void main()
cqltwslt 2011-05-28
  • 打赏
  • 举报
回复
gets的问题!参见ls
lengwuqin 2011-05-28
  • 打赏
  • 举报
回复
你这里面有很多看起来怪怪的:
gets()这个错了,不用多说,楼顶的人已经说了;
你这个程序是统计输入的字符串中的大小写字母、数字和其他字符的个数吧;
这一句就有问题:if(ch[i][j]>='A'&&ch[i][j]>='Z')
应该为:if(ch[i][j]>='A'&&ch[i][j]<='Z')
downmooner 2011-05-28
  • 打赏
  • 举报
回复
main() 不带返回值 默认是int,没return 0;
ljt3969636 2011-05-28
  • 打赏
  • 举报
回复
gets(&ch[i][j]);
xiaoguangzaia 2011-05-28
  • 打赏
  • 举报
回复
gets的参数是char *
ch[i][j]是char类型
应该gets(ch[j])

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧