需求 让用户输入一系列的正整数最后输入 -1 表示输入结束。然后程序计算出这些数字的平均数输出输入的数字个数和平均数。在这道题里-1 并不是一个要参与计算的数据它是一个“哨兵Sentinel”或者叫停止暗号。这就意味着我们的代码逻辑必须像安检一样在把数字放进 sum总和之前必须先查验它是不是 -1。while循环while的核心哲学是先检查再放行。因为要先检查所以我们在到达 while 大门之前手里必须先拿着一个数据。intmain(){intnumber;intsum0;intcount0;scanf(%d,number);while(number!-1){sumnumber;count;scanf(%d,number);}printf(%f\n,1.0*sum/count);// 1.0 的妙用强制触发浮点数运算防止整数除法精度丢失return0;}痛点 被迫写了两次 scanf看起来稍微有些啰嗦。优点 逻辑极其严密绝不可能把毒药 -1 吃进肚子里。do while循环do-while的核心哲学是不管三七二十一先进门干活出门前再查。intmain(){intnumber;intsum0;intcount0;do{scanf(%d,number);// 如果不加这个 if-1 就会被加进 sum 里导致全盘算错。if(number!-1){sumnumber;count;}}while(number!-1);printf(平均数是: %f\n,1.0*sum/count);}return0;}痛点 循环体内部必须硬生生塞进去一个 if 判断来做防御。优点 只需要写一次 scanf。