在线编译器 C

#include <stdio.h> int main() { int n,i=0; scanf("%d",&n); while(n>0){ n=n/10; n++;i++; } if(i=3){ printf("YES"); }else{ printf("NO"); } return 0; }
这段代码的目的是判断一个整数是否是三位数,但存在逻辑错误。

代码中 while 循环的作用是不断将 n 除以 10 并同时增加 n 和计数器 i,这会导致 n 的值被错误地修改,循环条件变得不可预测,最终 i 的值也不等于原始数字的位数。

- 在 while 循环里,你同时修改了 n 和 i,但 n 既是循环条件又是被除的数,这样 n 的值会快速变化,循环可能提前结束或无限循环。你应该只用一个临时变量来统计位数,不要改变原始输入。
- 判断相等应该用 `==` 而不是 `=`。`if(i=3)` 会把 3 赋值给 i,然后条件永远为真,导致总是输出 "YES"。