Zichenya 发表于 2020-6-11 12:38:48

这题!!

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

A)其中循环控制表达式与0等价
B) 其中循环控制表达式与'0'等价
C)其中循环控制表达式是不合法的
D)以上说法都不对
为什么答案选B,printf不是有返回值1?

永恒的蓝色梦想 发表于 2020-6-11 12:55:08

'0' 的 ACSII 码 是 48,不是 0 。

zzc1722584627 发表于 2020-6-11 14:32:54

个人理解 printf(" *") 打印* ,*对应的acsll码大于0,对于while来说 大于0就是1
答案B) 其中循环控制表达式与'0'等价
‘0’的acsll嘛也大于0
所以等价

Neverturnback 发表于 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')

405794672 发表于 2020-6-12 21:18:34

‘0’的值可不是0哦。它是个字符。只要不是0,while就继续。所有不是0的数字都与1是等价的。都相等。
页: [1]
查看完整版本: 这题!!