标题:下面一段代码中 choice=choice-'0'; 是什么意思啊?
只看楼主
sunwujun
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-12-4
结帖率:0
 问题点数:0 回复次数:5 
下面一段代码中 choice=choice-'0'; 是什么意思啊?
#include<stdio.h>
#include <conio.h>
void main()
{
    int i;
    char choice;
    char newspaper[5][20]={        {"1.水果日报"},
                                {"2.联合日报"},
                                {"3.自由日报"},
                                {"4.中国日报"},
                                {"5.不需要"}};
    for(i=0;i<5;i++)
    {
        printf("%s ",newspaper[i]);
    }
    printf("\n请输入选择号码:");
    choice=getche();
    printf("\n");
    choice=choice-'0';
    if(choice>=0 && choice<5)
    {
        printf("%s",newspaper[choice-1]);
        printf("\n谢谢你的订购!\n");
    }
    else if(choice==5)
        printf("\n感谢你的参考!");
    else
        printf("输入错误\n");
}
搜索更多相关主题的帖子: newspaper 中国日报 include choice 联合 
2014-12-19 14:37
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
请先学习ascii知识 如果能够掌握并理解  那么这个就没问题了

DO IT YOURSELF !
2014-12-19 14:44
srests
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:25
注 册:2014-12-19
得分:0 
简单地理解就是把字符串转换成数字,学习ascii基础知识就好理解了
2014-12-19 16:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
补充一下:这个是正规写法,不要学某些人那样直接写内码!换言之,这个与ASCII编码实际上没啥关系,不是ASCII编码,也是这样写,这才是通用性强的写法,不依赖于特殊编码。

[ 本帖最后由 TonyDeng 于 2014-12-19 18:41 编辑 ]

授人以渔,不授人以鱼。
2014-12-19 18:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
再说一下:在这里通常不建议写成choice=choice-的形式,因为本质上按键获得的是字符,而choice是选择的序数,所以不应该改变自己的性质。把按键字符用另外的变量记录,如keyChar,则写成choice = keyChar - '0';

授人以渔,不授人以鱼。
2014-12-19 19:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
须知不是所有计算机系统都是ASCII编码体系,所以不要动不动就说ASCII码,也不要在程序代码中写ASCII硬编码,这是忠告。不管什么编码体系,在设计时都有一个共识,即逻辑上连续的字符(比如数字0-9及字母表),必定是连续编码,以保证下一个字符是前一个的递增,这就是字符加减运算可以得到序数差异的原因。字符'1'必定是'0'的下一个字符,在数列上的增1,这个逻辑是不变的,不管'0'是48还是0,都是这么写代码,不要写成ch - 48,这么写在不是以ASCII编码的系统上运行就出错。

都说C是可移植性强的语言,但看很多人说C,在意可移植性的真没几个,总是以懂一些特定的底层知识为能,却不知道这些底层是随着不同环境而变化的,所谓高级语言的优势,是隐藏了底层细节而自动适应不同的环境,在你不是真的很了解相关底层机制时,不要乱写具体的底层代码,这是自我保护意识。

授人以渔,不授人以鱼。
2014-12-19 19:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-440128-1-1.html




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

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