#include<stdio.h>
int main()
{
int i,j,sum,a;
sum=0;
for(i=0;i<1000;i++)
{
for(j=0;j<=i;j++)
{
if(i%j==0)
sum+=j;
}
if(i==sum)
printf("%d",sum);
}
printf("%d=1");
for(a=2;a<1000;a++)
{
if(sum%a==0)
printf("+%d",a);
}
}
同学写的代码报错,看了很久没有发现错误在哪里,首先,编译是通过的,我首先怀疑是语义错误,但由于经验不足,先认为是出现了死循环,在插入几段printf用于检验后,定位到问题在第一个for循环嵌套的for循环里。
到此,彻底卡住,在经历了几分钟的反复尝试后,终于发现,问题在于不能模0,而它循环的初始变量正是0。
这种错误如果第一次遇到,要发现问题真的很难,感悟很深。
1.语法错误和语义错误都会让程序出现出乎意料的问题,编译器不报错,不意味着没有语法错误!
2.语法错误除了格式不对还可能是出现了程序无法处理的计算,你不能够模0,因为程序无法做出模以0的操作,自然就会出问题。