#include "stdio.h"
int main()
{
int k=10;
while(k=0)
k=k-1;
printf("%d\n",k);
return 0;
}
代码如上:一开始觉得是这是一段无限循环代码,但运行之后发现有输出,为0
开始思考为什么会有输出。后来多试了几段,代码和结果如下。
#include "stdio.h"
int main()
{
int k=10;
while(k=1)
k=k-1;
printf("%d\n",k);
return 0;
}
这段无输出,为无限循环。
#include "stdio.h"
int main()
{
int k=10;
while(k==0)
k=k-1;
printf("%d\n",k);
return 0;
}
这段不执行while,输出为10。
#include "stdio.h"
int main()
{
int k=10;
while(k==10)
k=k-1;
printf("%d\n",k);
return 0;
}
这段执行一次,输出为9。
上面三段都是顺着逻辑的,很好理解,是赋值类与关系式的区别。
但为什么给k赋值为0的时候会有输出呢?
思索半天后我猜想如下:k=0先给k赋值为0,并且使k=0这个表达式的值为0,于是while后面的表达式为0,跳出循环。
为了验证猜想编了如下代码:
#include "stdio.h"
int main()
{
int k=10;
printf("%d\n",k=0);
return 0;
}
结果输出为0,满意退出~
最后总结出自己一直原来忽略的一点:赋值表达式的值=被赋值变量的值