| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1702 人关注过本帖
标题:书上一个数组例子的疑问
只看楼主 加入收藏
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
书上一个数组例子的疑问
/* 1.6 数组 */
/* 统计各个数字,空白符及其他字符出现的次数 */
#include <stdio.h>
main()
{
        int c, i, nwhite, nother;
        int ndigit[10];
        nwhite = nother = 0;
        for (i = 0; i < 10; ++i)                // 给数组的10个元素赋值
                ndigit[i] = 0;
        while ((c = getchar()) != EOF)
                if (c >= '0' && c <= '9')                                               // 这里不理解???
                        ++ndigit[c-'0'];

                else if (c == ' ' || c == '\n' || c == '\t')    //如果是空白符就给变量加一
                        ++nwhite;
                else
                        ++nother;                                                                       //不是数字,不是空白符给变量加一
        printf("digits =");
        for (i = 0; i < 10; ++i)                                                        //输出数组的各个元素
                printf(" %d", ndigit[i]);
        printf(", white space = %d, other = %d\n", nwhite, nother);
}  



if (c >= '0' && c <= '9')
    ++ndigit[c-'0'];

    我的理解:
            判断c是否大于0小于9
            然后给数组加一

 我的疑惑是: 
             1  为什么它的判断里 0和9 要用 单引号括起来?
                 数组的下标里   c- '0' 是什么意思?
                           
搜索更多相关主题的帖子: include 统计 元素 
2016-07-24 17:29
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
收藏
得分:5 
回复 楼主 Man丶諦
'0'和‘9’ 是字符不是数字,所以要用单引号括起来

(c-'0')  因为这里的c只能是字符‘0’-‘9’   所以‘0’-'0'=0   '1'-'0'=1  依次类推
这里的数组自增是为了计算每个相同字符出现的次数

你可以看看ASCII码表

[此贴子已经被作者于2016-7-24 17:39编辑过]


千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 17:33
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:5 
首先, C 语言把字符看成是整数类型,因此 getchar() 读入的字符,在内存中实际上以整数形式存放的,并且通常是以 ASCII 码来存放的,即是说,当你输入字符 a 的时候,它在内存中实际上存放的是整数 97 。

为了判断 c 是否为数字 0-9 ,因为字符 0-9 所对应的 ASCII 为整数 48-57 ,因此只要判断 c >= 48 && c <= 57 ,而 48 对应 '0' , 57 对应 '9' ,所以写成 c >= '0' && c <= '9' 更容易理解。

对于 c - '0' ,就是获取数字 0-9 在数组中的下标。

===
只要理解所谓字符,其实就是一种整数类型

Read The Fucking Source Code~
2016-07-24 18:27
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
我去看了下ASCII码表有点理解了:
    用分号括起来的代表的是那个字母对应在ASCII上的数值如

        '9'    是 57
        '0'       48
   
        那 '9' - '0' = 9
所以相应的  c变量是1到9的数字减掉 '0' 就得到了那个数字自身
然后在那个数值元素的值加一

我理解的对吗?


电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 18:29
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
收藏
得分:0 
回复 4楼 Man丶諦
恭喜你答对了

虽然描述的不是很正确,但是意思是对的。

[此贴子已经被作者于2016-7-24 18:34编辑过]


千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 18:32
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
新的理解

字符就整数类型
    我们看到的是   字符

 电脑里理解的是  ASXII表里对应的整数

    所以可以用字符来做计算表达式,因为电脑会找到字符对应的整数来计算。

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 18:33
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
回复 5楼 晓益
谢谢,一去看码表忽然就懂啦。 

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 18:35
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
收藏
得分:0 
回复 6楼 Man丶諦
cahr型变量很有意思,因为它具有双重性
1. 可以把它看成是一个数字(0-127)
2. 也可以是一个字符,就是ASCII表中你看到的那些

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 18:37
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
收藏
得分:0 
回复 8楼 晓益
编程太强大了。

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 18:38
快速回复:书上一个数组例子的疑问
数据加载中...
 
   



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

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