回 帖 发 新 帖 刷新版面

主题:求助!

我想输入一篇3行,每行80字的文章,并计算该文章里字母,数字,空格和其他字符的个数,我明明设了数组想控制输入的数目,为什么运行时却可以输入任意多个字符呢???
这是我的程序;
#include <stdio.h>
void main()
{
    int i,j,m=0,n=0;
    int x=0,y=0,z=0;
    char str[3][80];
    printf("请输入这篇短文:\n");
    for(i=0;i<3;i++)
    {for(j=0;j<80;j++)
    {while((str[i][j]=getchar())!='/n')
    {
      if(str[i][j]>'a'&&str[i][j]<'z') n++;
      else if(str[i][j]>'A'&&str[i][j]<'Z') m++;
      else if(str[i][j]>'0'&&str[i][j]<'9') x++;
      else if(str[i][j]==' ') y++;
      else z++;
    }
    }
    }
    printf("小写英文字母为%d个\n",n);
    printf("大写英文字母为%d个\n",m);
    printf("数字为%d个\n",x);
    printf("空格为%d个\n",y);
    printf("其他字符为%d个\n",z);
    }
    

回复列表 (共5个回复)

沙发

把80改成1你就知道错在哪了

板凳


额。。。。。。。。可能是我C学的不够好吧,可不可以讲的明白点[em8]

3 楼

for(j=0;j<80;j++) // 循环80次
    {while((str[i][j]=getchar())!='\n') // 你这里的本意是想把所有的字符都读到这个二维数组,而while循环却导致输入停留在s[i][j],去掉这个循环加一个判断语句就可以了
    

for(j=0;j<80;j++)
                    {
                                     if ((str[i][j]=getchar())=='\n')
                                        break;
                                     //while((str[i][j]=getchar())!='\n')
                                      //{
                                  if(str[i][j]>'a'&&str[i][j]<'z') n++;
                                  else if(str[i][j]>'A'&&str[i][j]<'Z') m++;
                                  else if(str[i][j]>'0'&&str[i][j]<'9') x++;
                                  else if(str[i][j]==' ') y++;
                                  else z++;
                                  //}
                    }

4 楼


我路过的新手,这样改换是不对啊,为什么你说他会停留在S[i][j]呢??/不是有个for循环控制语句吗》??/难道控制不了,麻烦说下。。谢谢]
请填写代码
[em10]

5 楼

你除了while的错误外 数组应该为str【3】【81】因为回车也计入了一个字符 还有就是(str[i][j]>'a'&&str[i][j]<'z') 中间应该是有等于的 
#include <stdio.h>
void main()
{
    int i,j,m=0,n=0;
    int x=0,y=0,z=0;
    char str[3][81];
    printf("请输入这篇短文:\n");
    for(i=0;i<3;i++)
    {for(j=0;j<81;j++)
    {  if ((str[i][j]=getchar())=='\n')
                                        break;

      if(str[i][j]>='a'&&str[i][j]<='z') n++;
      else if(str[i][j]>='A'&&str[i][j]<='Z') m++;
      else if(str[i][j]>='0'&&str[i][j]<='9') x++;
      else if(str[i][j]==' ') y++;
      else z++;
    
    }
    }
    printf("小写英文字母为%d个\n",n);
    printf("大写英文字母为%d个\n",m);
    printf("数字为%d个\n",x);
    printf("空格为%d个\n",y);
    printf("其他字符为%d个\n",z);
    }

我来回复

您尚未登录,请登录后再回复。点此登录或注册