| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 677 人关注过本帖
标题:刚刚开始自学c语言。遇到一个问题求解···
只看楼主 加入收藏
Hank·P
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-7-28
结帖率:0
收藏
已结贴  问题点数:5 回复次数:8 
刚刚开始自学c语言。遇到一个问题求解···
本来在百度贴吧问过。但是答案不是很满意,所以小弟在此求高手解答


图片附件: 游客没有浏览图片的权限,请 登录注册

如果我要是随便输入1~9中任何一个数字的话,这个程序应该如何运行?
搜索更多相关主题的帖子: c语言 自学 百度贴吧 
2012-07-28 18:14
circlemiss
Rank: 2
等 级:论坛游民
帖 子:30
专家分:51
注 册:2012-7-19
收藏
得分:1 
输入1到9,switch 语句未遇到break,会根据switch括号里的条件开始顺序执行,先输入数字1,确切的说应该是字符1,‘1’-‘2’=-1,进入default:putchar(1+2)结果为3!
因为c定义为int而char级别低于int数据类型,所以字符会先转为int再和int型数据运算。根据以上所说不难推出2-7的结果值。到8和9不那么好推了,同样从switch里面的default进去,按理说应该输出10和11的。然而10和11分别是换行和回车的ascii码值。我也不清楚为啥输出的是字符:(冒号)和;(分号)ascii码值58和59,同求大神解释啊。
2012-07-29 20:01
user_qiangzi
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:194
注 册:2011-8-29
收藏
得分:1 
swithc(c-'2')  //这个没有问题么?
2012-07-29 20:03
a745043791
Rank: 4
等 级:业余侠客
帖 子:95
专家分:260
注 册:2012-2-12
收藏
得分:1 
回复 3楼 user_qiangzi
没有问题吧~
2012-07-29 20:18
a745043791
Rank: 4
等 级:业余侠客
帖 子:95
专家分:260
注 册:2012-2-12
收藏
得分:0 
回复 3楼 user_qiangzi
应该没有问题吧~
2012-07-29 20:19
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:1 
输入1时:c = '1',c - '2' = -1,default: putchar(c+2); c + 2 = '3'.打印字符'3'。返回
输入2时:c = '2',c - '2' = 0,case 0: 没有break;继续执行case 1: putchar(c+4); c + 4 = '6'.打印字符'6'。没有break;继续执行case 2:putchar(c+4);打印字符'6',遇到break;返回
输入3时:c = '3',c - '2' = 1,case 1: putchar(c+4); c + 4 = '7'.打印字符'7'。没有break;继续执行case 2:putchar(c+4);打印字符'7'。遇到break;返回
输入4时:c = '4',c - '2' = 2,case 2: putchar(c+4); c + 4 = '8'.打印字符'8'。遇到break;返回
输入5时:c = '5',c - '2' = 3,case 3: putchar(c+3); c + 3 = '8'.打印字符'8'。没有break;继续执行default: putchar(c+2); c + 2 = '7'.打印字符'7'。遇到break;返回
输入6时:c = '6',c - '2' = 4,default: putchar(c+2); c + 2 = '8'.打印字符'8'。返回
输入7时:c = '7',c - '2' = 5,default: putchar(c+2); c + 2 = '9'.打印字符‘9'。返回
输入8时:c = '8',c - '2' = 6,default: putchar(c+2); c + 2 = 0x3AH = ':'.打印字符':'
输入9时:c = '9',c - '2' = 7,default: putchar(c+2); c + 2 = 0x3BH = ';'.打印字符';'

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-29 21:03
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:1 
回复 2楼 circlemiss
首先你要清楚putchar()它的功能是什么...它输出的是字符,字符又是以ascll码存起来的....你在输入0~7的时候,输出的是2~9(ascll码为50~57),当你输入8和9的时候,ascll码就变成了58、59,所以输出的是:;
2012-07-29 21:09
circlemiss
Rank: 2
等 级:论坛游民
帖 子:30
专家分:51
注 册:2012-7-19
收藏
得分:0 
唉,连这都说错,我真是想多了。。。。。
2012-07-29 21:33
freecast
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2012-7-29
收藏
得分:1 
以下是引用circlemiss在2012-7-29 20:01:27的发言:

输入1到9,switch 语句未遇到break,会根据switch括号里的条件开始顺序执行,先输入数字1,确切的说应该是字符1,‘1’-‘2’=-1,进入default:putchar(1+2)结果为3!
因为c定义为int而char级别低于int数据类型,所以字符会先转为int再和int型数据运算。根据以上所说不难推出2-7的结果值。到8和9不那么好推了,同样从switch里面的default进去,按理说应该输出10和11的。然而10和11分别是换行和回车的ascii码值。我也不清楚为啥输出的是字符:(冒号)和;(分号)ascii码值58和59,同求大神解释啊。

在ASCII码表中,0-9的ASCII码是48-57,而冒号(:)和分号(; )的ASCII的值是58和59.
getchar这个函数getchar,当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕。
2012-07-30 00:28
快速回复:刚刚开始自学c语言。遇到一个问题求解···
数据加载中...
 
   



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

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