Online Compiler 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; }
这段代码的目的是判断一个整数是否是三位数。它通过不断除以10来减少数字的位数,同时用变量i记录循环次数,最后检查i是否等于3。

代码中存在一个逻辑错误:在循环中,每次除以10后立即对n加1,这改变了数字本身,导致循环无法正确统计原始数字的位数。

- 循环中的 `n++` 语句会干扰位数统计。思考一下:如果原始数字是123,第一次循环后n变成12,然后立即加1变成13,这样后续的除法操作就不再是基于原始数字的位数了。
- 变量i的初始值设为0,但循环条件 `n>0` 在n被修改后可能提前结束或无限循环。例如输入0时,循环不会执行,i保持0,但0不是三位数,结果正确;但输入负数时,循环也不会执行,结果错误。