do while()的问题

ppper2022 2005-10-28 10:58:29
main()
{
int x=2;
do
{
int x=1;
x=!x;
printf("%d,",x);
}
while(--x);
}


最后输出是什么结果?为什么?两问都要答,答对,才有分哦。:P
...全文
98 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppper2022 2005-10-28
  • 打赏
  • 举报
回复
晕S,学得也忘记是差不多了。结贴了。
ppper2022 2005-10-28
  • 打赏
  • 举报
回复
megaboy(飞天御剑流之杀神一刀斩) ( ) 信誉:100 2005-10-28 11:10:00 得分: 0
do循环里面的x覆盖了外部定义,这个x运行完do的复合语句就被抛弃了,跟main中的x无关,因此打印两次0后,main中的x成为0,循环结束。

为什么呢?当第一次do的时候,X的值不是已经是0了?再执行--x,不是-1么?
这里又没有全局变量,局部变量,这怎么解释来着?有没有一个规则参考?
firstway 2005-10-28
  • 打赏
  • 举报
回复
循环外:因为int x=2;所以while(--x);循环两次,这里X先自减,再判断是否为0,所以循环2次。
循环里面:因为int x=1;x=!x;(非1就是0 啦)所以打印x结果始终是0。
个人认为循环里外两个X其实不是指向同一东西。
megaboy 2005-10-28
  • 打赏
  • 举报
回复
main中的x跟do复合语句中的x作用域不同,对于do复合语句中的x,这叫内部定义覆盖了外部定义。

这是基础中的基础了,先看看书。
wxyeeis 2005-10-28
  • 打赏
  • 举报
回复
为什么x=0时x=!x还是0啊?
megaboy 2005-10-28
  • 打赏
  • 举报
回复
do循环里面的x覆盖了外部定义,这个x运行完do的复合语句就被抛弃了,跟main中的x无关,因此打印两次0后,main中的x成为0,循环结束。
ppper2022 2005-10-28
  • 打赏
  • 举报
回复
为什么会输出两个0呢?do内会执行两次?
firstway 2005-10-28
  • 打赏
  • 举报
回复
结果为:0,0,
因为int x=2;所以while(--x);喜欢两次
循环里面:因为int x=1;x=!x;所以打印x结果始终是0。
majianan 2005-10-28
  • 打赏
  • 举报
回复
循环两次,输出两个0
int x = 1;
!x的值为0
majianan 2005-10-28
  • 打赏
  • 举报
回复
选换两次,输出两个0
int x = 1;
!x的值为0

69,379

社区成员

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

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