鱼C论坛

 找回密码
 立即注册
查看: 891|回复: 4

[已解决]这题!!

[复制链接]
发表于 2020-6-11 12:38:48 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[题5.7]设有程序段:
t=0;
while (printf(" *"))
{ t++;
if(t<3) break;}

A)其中循环控制表达式与0等价
B) 其中循环控制表达式与'0'等价
C)其中循环控制表达式是不合法的
D)以上说法都不对
为什么答案选B,printf不是有返回值1?
最佳答案
2020-6-11 18:54:48
①printf的返回值根据其打印的字符来决定的,printf("*"); 返回值为1, while(printf("*");) == while(1)   等价于  while(true)
②'0'的ascii码值为48 , while('0') == while(48) 等价于 while(true)
③因此while(printf("*");) 等价于 while('0')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 12:55:08 | 显示全部楼层
'0' 的 ACSII 码 是 48,不是 0 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 14:32:54 | 显示全部楼层
个人理解 printf(" *") 打印* ,  *对应的acsll码大于0,对于while来说 大于0就是1
答案B) 其中循环控制表达式与'0'等价
‘0’的acsll嘛也大于0
所以等价
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 18:54:48 | 显示全部楼层    本楼为最佳答案   
①printf的返回值根据其打印的字符来决定的,printf("*"); 返回值为1, while(printf("*");) == while(1)   等价于  while(true)
②'0'的ascii码值为48 , while('0') == while(48) 等价于 while(true)
③因此while(printf("*");) 等价于 while('0')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-12 21:18:34 | 显示全部楼层
‘0’的值可不是0哦。它是个字符。只要不是0,while就继续。所有不是0的数字都与1是等价的。都相等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 15:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表