为什么执行这个C语言程序后会不断刷屏啊?而且还退不出来!跪求高手解答啊!

main(){intn=3;while(n--)printf("%d",--n);}还有当n=1时,while(n--)以下的程序还运不运行?那个n--是取1还是0... main()
{
int n=3;
while(n--)
printf("%d",--n);
}

还有当n=1时,
while(n--)以下的程序还运不运行?
那个n--是取1还是0
展开
 我来答
一小子攻城狮
2011-05-11 · TA获得超过1515个赞
知道小有建树答主
回答量:695
采纳率:0%
帮助的人:195万
展开全部
因为n=0被跳过了
n--:在当前表达式中它仍采用原值,在其后的表达式中将采用减过之后的值,如:
int m,k,n=3;
m=n--;//m的最终值为3,在此时printf("%d",--n)的话,与m的值相同
k=n;//k的最终值为2
--n:则不同,如:
int m,k,n=3;
m=--n;//m的最终值为2,在此时printf("%d",--n)的话,与m的值相同
k=n;//k的最终值为2

根据这个你再看看是不是0被跳过了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mcmailbox
2011-05-11
知道答主
回答量:22
采纳率:0%
帮助的人:5.9万
展开全部
衰。。。

第一次循环:
while(n--)执行后,n=2
--n执行前,n=1;

第二次循环:
while(n--)执行后,n=0
--n执行前,n=-1;

以上,while已经永远失去取值为0的机会,不可能退出。
应修改为
while(n>0)
{
n--;
printf("%d",--n);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linuxhenhao
2011-05-11 · TA获得超过756个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:264万
展开全部
n=3,然后while判断为真,之后n--,n=2;进入循环,--n,n=1,打印出1;然后又到while判断,n=1,为真,然后n--,n=0;进入循环内,--n,n=-1。打印出-1;然后又到while判断,n=-1,为真,继续减下去,再也遇不到0了,所以死循环。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天殇舞
2011-05-11 · 超过12用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:50.8万
展开全部
while(n--) 是在n=0 时结束程序。你上面的程序n的值依次为:第一次循环:while(n--):n=2,--n:n=1 第二次循环:while(n--):n=0,--n:n=-1
结果就是在执行第三次循环时 n=-1,因此程序陷入死循环(因为之后n都不可能等于0)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mornsnow
2011-05-11 · TA获得超过765个赞
知道答主
回答量:86
采纳率:0%
帮助的人:68.5万
展开全部
第一次while(n--) 即while(3) 之后 n=2 执行print --n之后 n=1
第二次while(n--) 即while(1) 之后n=0 执行print --n之后 n=-1
之后就是while(n--) 此时n=-1 所以跳过了n=0;除了0 之外 其他数值均为真 所以继续循环 形成死循环
输出结果应该是 1 -1 -3 -5 ......
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式