是while的循环问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 05:28:06
int k=2;
while(k--);
printf(“%d\n”,k);
为什么我总是少一次循环?
答案应该是是-1

k--相关于函数。在这个函数如返回k值,并将k-1.
int _--(int *n) //_--相当于函数名
{
int old_value = n;
n = n-1;
return old_value ;
}
k=2 时 函数 (k--)值为2 k=1 while表达式为真
k=1 时 函数 (k--)值为1 k=0 while表达式为真
k=0 时 函数 (k--)值为0 k=-1 while表达式为假

你在下面再加一行printf(“%d\n”,k);就可以了
你现在的打印语句其实是
while(k--)
{
printf(“%d\n”,k);
}

这样的,如果k=0,就直接跳出循环,虽然k=-1了,但是不会执行printf(“%d\n”,k);这一句

2楼正解

楼主把while(k--);
后面的;去掉就是正解了
相当于
while(k--)
;//这是一个空语句
所以当k--=0的时候还是执行空。执行完后k-1=-1
此时的k不符合while。所以跳出
然后printf.此时显然是-1

如果
int k=2;
while(k--)//去掉分号
printf(“%d\n”,k);
这里的printf属于while。所以会边循环边打印
当k--=0的时候printf的k=0.等循环后k-1=-1
然后跳出循环。
最终的结果是循环两次
k=1;
k=0;

因为K=0时已经跳出循环了,C语言中非正数都为假~

注意你源程序中:while(k--);
“;”的位置很重要,这里要不要‘;’对应的结果是不同的,基础的就不用多讲了,4楼解释的很清楚了。