2 gudong1996 gudong1996 于 2016.03.13 23:42 提问

新人提个c语言问题(手机有字数限制,所以代码比较难看。。。前面的部分就省了)

要求输入一个字符,输出它的ASCII码int main(){int b;scanf("%c",&b);printf("%c %d",b,b);return 0;}
前面定义b为int,但scanf里输入的是%c,为啥最终还能成功的输出字符的ASCII码?是因为scanf里用的是%C,然后电脑从键盘录入的时候自动把输入的东西录成字符型了?并没有受到前面的那个int影响?

7个回答

renlong0829
renlong0829   2016.03.14 00:57
已采纳

所有可以通过键盘输入的符号,在内存中就是以对应的ASCII码值存储的。
变量b保存的就是输入字符的ASCII码值。
%c是表示这个输入/输出必须是可以显示的字符。换句话说就是在一个txt文件里面能够出现的字符。
你按F1,ctrl,shift,alt之类的按键,是不能得到ASCII码的。

renlong0829
renlong0829 回复gudong1996: 是的。%c表示只接受可以显示的字符,这个字符是以ASCII值(取值范围32~126)保存在变量b里面。
接近 2 年之前 回复
gudong1996
gudong1996 回复renlong0829: 但是前面b定义的是int型呀,它怎么就被录入了字符?并且能够成功输出?是因为scanf里那个%c吗?
接近 2 年之前 回复
fanfan4569
fanfan4569   2016.03.14 10:12

因为每个字符的编码实际上也是用整型编的。如果你将它强行转换为整型,是可以转的

devmiao
devmiao   Ds   Rxr 2016.03.13 23:56

%c读取了字符,输出%c是字符,%d是 ascii,这是自动的。

gudong1996
gudong1996 回复苏小喵: 但前面定义的是int 型,它读取的时候不会收到这个定义影响吗?
接近 2 年之前 回复
gudong1996
gudong1996 回复苏小喵: 受到
接近 2 年之前 回复
gudong1996
gudong1996 回复苏小喵: 但是前面定义的是int 型呀,它不会收到定义影响吗?
接近 2 年之前 回复
baby00qi
baby00qi   2016.03.14 00:35

你说的应该是对的,int和char是通用的,我又用float型试了一下不成功,不过我以前还真没注意过这个问题

skyangel123
skyangel123   2016.03.14 08:15

ASCII字符就是只占一个字节的整型数据,推荐学习CSAPP数据编码一章

wangyan_HBU
wangyan_HBU   2016.03.16 17:03

你只需要记住“int类型可以用%d格式输出数值,char类型既可以用%c格式输出字符,也可以用%d格式输出该字符对应的ASCII码”就可以了。

Longyu_wlz
Longyu_wlz   2016.03.21 09:37

scanf()函数替你进行了转化
printf()替你进行了转化

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!