求助:一个让我困惑了很久的问题

Haruka 2007-09-15 12:58:22
如果输入程序
#include<stdio.h>
void main()
{
int i='45';
putchar(i);
}
为什么在VC里输出是5啊?请各位指点,一下不胜感激!
...全文
318 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpaal 2007-09-21
  • 打赏
  • 举报
回复
兄弟 继续努力把
独孤过儿 2007-09-20
  • 打赏
  • 举报
回复
在C语言中,单引号中间的变量表示一个字符,所以单引号中间只能有一个字符;如果要表示一

个字符串,要用双引号,你的这句:

int i='45';

本意是想把45这个数赋值给 int 类型的变量 i,但是你错误的给45加上了单引号,这样它就变

成了一个“怪物”,它既不是整形变量,也不是字符,也不是字符串了,因为字符是单引号引起

来的,中间只能有一位,字符串是双引号引起来的,所以你的输出是不正常的。

至于为什么会输出5,楼上的已经解释了,但是估计现在的你理解起来很困难。你暂时可以不用

管,只需要记住,你声明的变量要和它的类型相匹配就行了,随着学习的深入,你渐渐的就明白

为什么输出是5了

zjzzdx 2007-09-20
  • 打赏
  • 举报
回复
putchar() 每次只能输出一个字符,但'45'这个字符串有两个字符 所以只输出一个了 如果写成这样:
{char i[]="45";
puts[i];}
这样可以输出 45 。
Treazy 2007-09-15
  • 打赏
  • 举报
回复
这个问题只能说VC的编译器存在小问题,有些错误不报,或者报了楼主也没注意
输出多少不重要,我还敢说有的编译器还能输出4

重要的把数据的类型都搞清楚了,就象楼上几位说的,把基础打扎实了!
huang_yu1314 2007-09-15
  • 打赏
  • 举报
回复
同意ls
_石头_ 2007-09-15
  • 打赏
  • 举报
回复
哎~
这些兄弟们都怎么啦?楼主不要去考虑为什么是5,先把语言弄严谨些,尽量避免出现一些常识性的问题,等自己的经验和知识都积累到一定的程度呢,就水到渠成了!
cceczjxy 2007-09-15
  • 打赏
  • 举报
回复
刚开始学的,进制转换一般是最难懂的.应该没有3435这样更好懂.

liqiang123abc 2007-09-15
  • 打赏
  • 举报
回复
lovewhzlq()
你说的都是什么啊

别误导。。

楼主他本来就是新手。
你这么说
他会更迷糊。。
liqiang123abc 2007-09-15
  • 打赏
  • 举报
回复
你是刚开始学C语言么
我来告诉你答案
是这样

int i='45';

最后int i的数值是13365 
13365表示成字符就是5

为什么是13365呢

4的数值是52
2进制表示为 00110100
5的数值是53
2进制表示为 00110101
那么'45'就是把2个个起来
0011010000110101
结果就成了10进制13365了
再经过putchar(i);输出就成了 5 了

chen_liang747703 2007-09-15
  • 打赏
  • 举报
回复
进来学习!!!学习!
lovewhzlq 2007-09-15
  • 打赏
  • 举报
回复
VC把'45'当成两个字符来赋值给i,i 是4个字节,赋值以后i=0x00003435
'4'=34;'5'=35;当用putchar时,就取一个低字符把'5'给输出了!
jixingzhong 2007-09-15
  • 打赏
  • 举报
回复
'45' 这个表示的意义
_石头_ 2007-09-15
  • 打赏
  • 举报
回复
Haruka ()
为什么在VC里输出是5啊?
--------------------------------
vc能通过编译?----典型的表达式类型不匹配阿!这都可以?----郁闷阿~~~~
_石头_ 2007-09-15
  • 打赏
  • 举报
回复
int i='45';
错误:这句话包含了几个错误
i的类型是int; ' '是字符的表示方式, 而45不是一个字符(ascii码里面没有'45',只有'4'和'5')

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧