scanf不管将输入的字符串翻译成任何类型的数据,都是先把字符串翻译为整数吗?然后在把整数翻译成其他类型的数据?为什么由於不同機器的int尺寸不同,此時又要把int規整爲unsigned char?
以下是引用屋顶在2016-3-12 00:01:35的发言:
scanf不管将输入的字符串翻译成任何类型的数据,都是先把字符串翻译为整数吗?然后在把整数翻译成其他类型的数据?为什么由於不同機器的int尺寸不同,此時又要把int規整爲unsigned char?
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位那麽簡單的,你最好不要企圖自己做這類轉換。