| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2888 人关注过本帖
标题:请教hhd转换字符在scanf中是不是把整数读取成char数据?谢谢
只看楼主 加入收藏
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 8楼 江湖一笑
我是个新手,我理解的是:%hhd将整数读取为char类型,而char类型是一个字节大小的,我运行上面的代码,打印出来的还是4,为什么呢
2016-03-11 23:25
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 10楼 jklqwe111
那这个hhd有什么用呢
2016-03-11 23:28
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 9楼 TonyDeng
我的编译器运行你的代码失败了,编译器是gcc,这是怎么回事,是不是缺少头文件,对于scanf_s来说,
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2016-3-11 23:34编辑过]

2016-03-11 23:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 13楼 屋顶
把_s刪掉。弄懂精神,不要照抄,用傳統的scanf()/printf()格式就可以了。

[此贴子已经被作者于2016-3-11 23:36编辑过]


授人以渔,不授人以鱼。
2016-03-11 23:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你得到結果之後,我再告訴你是怎麽回事。

授人以渔,不授人以鱼。
2016-03-11 23:38
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 14楼 TonyDeng
明白了,谢谢大神,就是将asc值转换成对应的字符对吗
2016-03-11 23:40
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 15楼 TonyDeng
请大侠指教,
2016-03-11 23:41
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 15楼 TonyDeng
我得到的结果是A
2016-03-11 23:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你要明白scanf()函數的運行機制:所有通過控制臺輸入的數據,其實都是字符串,scanf()的作用是把字符串解讀成所希望的數據。你在控制臺中鍵入65,實際上是在輸入流中寫入一個字符串"65",但你希望scanf()把這個字符串解釋爲某個字符(unsigned char類型)的編碼,那麽就使用"%hhd"格式符,scanf()就會按照要求把這個字符串翻譯爲整數(int)65(注意整數65和字符串"65"是兩回事,轉換是需要計算的),但由於不同機器的int尺寸不同,此時又要把int規整爲unsigned char,賦値給由&ch地址指向的數據對象(實際上scanf()根本不在乎ch是什麽類型,它祗把&ch的地址視爲一個unsigned char變量的入口)。"%hhd"就是指示scanf()做這一系列動作的。由於65被解釋爲字符,所以按照ASCII編碼的規則,這個字符是'A'。

[此贴子已经被作者于2016-3-11 23:55编辑过]


授人以渔,不授人以鱼。
2016-03-11 23:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
當你明白了上面所講的原理,就會明白scanf()很多奇怪的行爲,試試下面的代碼:
程序代码:
int ch;
scanf("%d", &ch);
printf("%d\n", ch);
printf("%c\n", ch);
printf("%f\n", ch);
printf("%s\n", ch);


注意:這裏自始自終都是同一個輸入,即"65"被scanf()解釋爲int 65後,仍然可以被printf()解釋爲不同的類型輸出,而ch的値沒變過。scanf()的行爲與此相同。

[此贴子已经被作者于2016-3-12 00:04编辑过]


授人以渔,不授人以鱼。
2016-03-11 23:53
快速回复:请教hhd转换字符在scanf中是不是把整数读取成char数据?谢谢
数据加载中...
 
   



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

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