#include<stdio.h> int main() { int age = 20; while (age++ <= 65) { if ((age % 20) == 0) printf("Here is %d age!!!bom lalakala\n", age); if (age = 65) printf("here is my %d age\n", age); } return 0; }
age=20时满足||if((age%20)==0)应该执行该语句下对应的printf语句,但是并没有,为什么呢?
age是一个在递增的过程,他却始终(age<65时)第二个if语句,并且陷入死循环,这是问什么?
首先两个错误,第一个楼上已经说l
#include<stdio.h> int main() { int age = 20; while (age++ <= 65)//判断时age=20 { //age++之后age=21,所以第一句不满足 if ((age % 20) == 0) printf("Here is %d age!!!bom lalakala\n", age); if (age = 65) printf("here is my %d age\n", age); } return 0; }
这是C primer plus上的一道练习题,没有执行第一if语句是为什么?而是直接跳转在第二个if句中,(age变量是在递增中执行第二语句吗?)
@振宁: 第一次进程序时,由于age++的,age=21,第一个if语句不满足,此时会走到第二个if,由于你在判断age是不等于65时,你把判断语句if(age==65),写成了赋值if(age=65),所以会执行第二条if;
第二次while判断时,age就变成了65,age++,age=66,第一条if不成立,就直接走到了第二条if,所以造成了死循环
@MrNice:自增运算符age++,在执行age++<=65后,age=20执行完一次后,在进入循环体后就是age=21(跟是否完成一次完整语句指令无关),是不是这样理解
if (age = 65)
为什么? age=20时他是满足第一个if语句,为什么没执行第一个语句
‘
@振宁: 你在第一个 if 那里设置个断点,你看看 age 的值是多少。
@Launcher: 还是输出第二个语句;;
@振宁: 你在第一个 if 那里设置个断点,你看看 age 的值是多少
@Launcher: 等于66.。。。。
@振宁: 66 % 20 == 0 ?
@Launcher: 在age=20时,进入while循环的(age++<=20)条件时,在准备执行循环时age就变成age=21,然后一下子跳转到age=65.。。。。。懵了