| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2935 人关注过本帖
标题:请教hhd转换字符在scanf中是不是把整数读取成char数据?谢谢
只看楼主 加入收藏
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
scanf不管将输入的字符串翻译成任何类型的数据,都是先把字符串翻译为整数吗?然后在把整数翻译成其他类型的数据?为什么由於不同機器的int尺寸不同,此時又要把int規整爲unsigned char?
2016-03-12 00:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用屋顶在2016-3-12 00:01:35的发言:

scanf不管将输入的字符串翻译成任何类型的数据,都是先把字符串翻译为整数吗?然后在把整数翻译成其他类型的数据?为什么由於不同機器的int尺寸不同,此時又要把int規整爲unsigned char?


當scanf()使用"%s"或"%c"時不會轉換。

char是8位的,而int最小也是16位的,大尺寸向小尺寸轉換需要取捨協議及程序員的明確指示,因此這裏(使用%hhd"格式符時)不能定義int ch,編譯器在編譯時會警告你應該定義成unsigned char,這與把long類型賦値給非long類型、或把double賦値給float時一樣。不同的機器,其int有16位、32位、64位的區別,再加上大小頭的差異,不是貿貿然取左邊或右邊8位那麽簡單的,你最好不要企圖自己做這類轉換。

授人以渔,不授人以鱼。
2016-03-12 00:14
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 22楼 TonyDeng
谢谢大侠的指教了,受益良多,thank you
2016-03-12 00:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf()/printf()的重點在格式控制字符串(第一個參數)上,那本質上是一套超越C之外的微型解釋語言,故這套函數所引發的錯誤,絶大多數是在運行時發生,編譯時無法檢查出來。另外一個與此相似的是正則表達式。

授人以渔,不授人以鱼。
2016-03-12 00:31
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:4 
hhd只是把int类型按照char类型来理解,即存储时只存储最后一个字节,比如说你输入48,那么输出将会是0。因为0的asii码是48。数据在内存中只是按不同的方式解释罢了,并不能改变变量的基类型。

未佩好剑,转身便已是江湖
2016-03-12 09:45
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 24楼 TonyDeng
大神那如果想输入一个数字字符或字符串,用什么样的转换符变成打印int呢
2016-03-12 15:24
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 25楼 alice_usnet
谢谢
2016-03-12 15:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用屋顶在2016-3-12 15:24:10的发言:

大神那如果想输入一个数字字符或字符串,用什么样的转换符变成打印int呢

我前面説了,在控制臺通過鍵盤輸入的永遠是字符,要到了計算機裏面是什麽,自己轉換。庫函數提供了各種各樣的轉換手段,不够的可以自己寫。編程絶大多數時候都是處理字符和字符串,二進制數據祇是計算機自己內部用,跟人交互的輸入輸出,必須是人可閱讀和書寫的文本。

授人以渔,不授人以鱼。
2016-03-12 15:35
屋顶
Rank: 1
等 级:新手上路
帖 子:174
专家分:7
注 册:2016-2-27
收藏
得分:0 
回复 28楼 TonyDeng
如果我想把输入的字母字符转变成int数据输出,那库函数里有没有专门的转换附符。。
2016-03-12 16:29
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
格式化字符序列只是告诉编绎器怎么解释内存中的数据罢了,并不能改变变量的基类型。

未佩好剑,转身便已是江湖
2016-03-12 21:29
快速回复:请教hhd转换字符在scanf中是不是把整数读取成char数据?谢谢
数据加载中...
 
   



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

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