| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2230 人关注过本帖
标题:为什么用scanf输入2维数组的字符,剩余的空间都被当做空格来计算(包括回车 ...
只看楼主 加入收藏
幻想仙
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-4-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
为什么用scanf输入2维数组的字符,剩余的空间都被当做空格来计算(包括回车)?
#include<stdio.h>
int main()
{int i,j,A=0,l=0,n=0,space=0,m=0;
 char a[2][10];
 printf("请输入2行文字:\n");
 for(i=0;i<2;i++)
   for(j=0;j<10;j++)
     scanf("%c",&a[i][j]);
  {for(i=0;i<2;i++)
     for(j=0;j<10&&a[i][j]!='\0';j++)
       {if(a[i][j]<='Z'&&a[i][j]>='A')A=A+1;
        else if(a[i][j]<='z'&&a[i][j]>='a')l=l+1;
        else if(a[i][j]<='9'&&a[i][j]>='0')n=n+1;
        else if(a[i][j]=' ')space=space+1;
        else if(a[i][j]='\0')m=m+1;
       }
  }
 printf("大写字母的个数:%d\n",A);
 printf("小写字母的个数:%d\n",l);
 printf("数字的个数:%d\n",n);
 printf("空格的个数:%d\n",space);
 printf("空字符的个数:%d\n",m);
 return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include 空间 
2015-04-25 11:39
请叫我IT楠
Rank: 2
来 自:未来星系
等 级:论坛游民
帖 子:12
专家分:23
注 册:2015-4-25
收藏
得分:0 
你想表达什么意思?   难到和你的要求不符合吗?

小弟初来咋到
2015-04-25 18:04
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
收藏
得分:0 
回复 楼主 幻想仙
数组没有赋值的空间默认就为空格所对应的字符,所以统计出来的未赋值的空间都是空格。
2015-04-25 18:33
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
第14行
else if(a[i][j]=' ')space=space+1;你用=号,只要上面的不符合,就会运行这一行,所以空格就多出来
改成
else if(a[i][j]==' ')space++;

另外,判定空字符的问题:数组一开始没有初始化,不代表里面存着的是空字符,所以这样测试,空字符个数都会是0

[ 本帖最后由 我爱吃青菜 于 2015-4-25 19:00 编辑 ]
2015-04-25 18:52
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:5 
程序代码:
#include<stdio.h>
int main()
{
    
    int i,j,A=0,l=0,n=0,space=0,m=0;
    char a[2][10];
    printf("请输入2行文字:\n");
    for(i=0;i<2;i++)
       gets(a[i]);
    for(i=0;i<2;i++)
    {
        for(j=0;j<10;j++)
        {
             if(a[i][j]<='Z'&&a[i][j]>='A')A++;
            else if(a[i][j]<='z'&&a[i][j]>='a')l++;
            else if(a[i][j]<='9'&&a[i][j]>='0')n++;
            else if(a[i][j]==' ')space++;
            else if(a[i][j]=='\0')
            {
                m++;
                break;
            }
        }
    }

    printf("大写字母的个数:%d\n",A);
    printf("小写字母的个数:%d\n",l);
    printf("数字的个数:%d\n",n);
    printf("空格的个数:%d\n",space);
    printf("空字符的个数:%d\n",m);

    return 0;
}


[ 本帖最后由 我爱吃青菜 于 2015-4-25 20:10 编辑 ]
2015-04-25 19:55
幻想仙
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-4-25
收藏
得分:0 
回复 3楼 z_j_j_1
那为什么它连回车都当成空格的个数来算?
字母,数字,空格,回车的个数加起来等于总空间数20

[ 本帖最后由 幻想仙 于 2015-4-26 10:06 编辑 ]
2015-04-26 09:55
幻想仙
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-4-25
收藏
得分:0 
回复 4楼 我爱吃青菜
改了,没用。
而且不是输入字符时结束后,系统不是应该会给其自动加上一个空字符表示结束吗?
2015-04-26 10:02
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:3 
按你的代码,如果数组元素不是大写字母,不是小写字母,不是数字,就会运行到else if(a[i][j]=' ')space=space+1;
请注意else if的判定条件是a[i][j] = ' ',赋值语句作为条件总是为真值,所以不是上面的条件,就一定会满足这个条件,space就会加1,所以就让你以为回车也算进去。
其实,剩下的数组元素全被你赋值成空格了
2015-04-26 10:04
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:2 
只有输入字符串才会自动添加空字符
空字符后面有空间的话,会保持未初始化状态
2015-04-26 10:06
幻想仙
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-4-25
收藏
得分:0 
回复 8楼 我爱吃青菜
哦~明白,现在空格个数改对了,但是为什么要字母,数字,空格,回车个数加起来等于总空间20才能显示答案?
2015-04-26 10:14
快速回复:为什么用scanf输入2维数组的字符,剩余的空间都被当做空格来计算(包括 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018553 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved