“=”运算符的结合性, 请教功力深厚者。

leonatcs 2005-05-11 12:06:44
“=”运算符的结合性:
设pf所指的txt文件内容为:18,
则:q = (fgetc(pf)-48)*10 + fgetc(pf)-48
与q = (fgetc(pf)-48)*10 + (fgetc(pf)-48) 的值不同,前者为18,后者为81。

这是怎么回事?
请讲详细些,谢谢!
...全文
182 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonatcs 2005-05-11
  • 打赏
  • 举报
回复
我在实际编程的时候发现不同啊。
(BCB6下。)
llmsn 2005-05-11
  • 打赏
  • 举报
回复
照上面的式子看起来应该是相同的.
leonatcs 2005-05-11
  • 打赏
  • 举报
回复
to whyglinux(山青水秀)

是和等号的结合性没关系,应该说是赋值表达式的运算顺序。

谢谢!兄台功力果然深厚:)
leonatcs 2005-05-11
  • 打赏
  • 举报
回复
to piaozi2003()
the 31 you mentioned is a Hex number, which is different from a Dec number.
zhaoliang_chen 2005-05-11
  • 打赏
  • 举报
回复
up
piaozi2003 2005-05-11
  • 打赏
  • 举报
回复
楼主的题目本身就有问题,fgetc读取一个字符,和整数进行运算,'1'=31,'8'=38,
怎么算也算不出18和81这两个数字
bsnhk 2005-05-11
  • 打赏
  • 举报
回复
to whyglinux(山青水秀) :
强!!!!!!
lzwei3842 2005-05-11
  • 打赏
  • 举报
回复
学习
whyglinux 2005-05-11
  • 打赏
  • 举报
回复
你遇到的这个问题与“=”运算符无关。

出现这个问题的原因在于:你的这个表达式的运算结果取决于操作数的求值顺序。

但是C/C++标准没有对操作数的求值顺序作出规定,而是允许各个编译器根据情况灵活处理。所以,对于你上面提供的表达式,你无法预计哪一个fgetc(pf)先被执行。

因此,我们说如果一个表达式的结果依赖于操作数的求值顺序,那这个表达式的行为(即结果)是无定义的;而使用标准无定义的行为是错误的,所以你应该修改你的表达式,使其与操作数的求值顺序无关。
august1983 2005-05-11
  • 打赏
  • 举报
回复
我觉得你不应该在等式里面用FGETC这个函数;

你可以试试 TMP = FGETC(PF);然后把TMP 放到等式里面,结果应该一样.

FGETC这个函数挪动了你的指针造成这种情况,以前我也遇到过

以上为个人观点,没有经过编译

69,382

社区成员

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

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