作者在 2020-05-12 21:47:02 发布以下内容
博主又双叒叕来纠错了。
首先让我们观察一下《C程序设计(第五版)》的134面最下方的代码:
然后让我们试运行一次:
代码运行结果跟书上的图片完全不符。。。
不过这里是小问题,输出时将printf里的语句改为%-4d即可。
但如果将代码改成每5个数据输出一行,问题就出现了:
显然每行之间的距离并不符合程序的预期效果。
经过简单的分析就能发现问题出在控制换行的if语句上,如果根据源程序,当m%10==0时输出\n,但是因为这个语句放在了控制m的值的if语句外面,所以当第一行输出结束后,下一个数如果不是素数,那么m的值就不会改变,运行至最后的if语句时同样会输出\n,因此每行最后的数和下一行第一个数之间差几个偶数,就会输出几个\n(此处注意每次循环m应加2)。这显然不是我们需要的结果,而如果将控制输出\n的语句纳入上一个if语句中,问题就能得到解决了:
此时如果m是偶数,程序会继续循环这样,而不会进入if语句进行判断,从而避免了\n的错误输出。
那么为什么每10个数据一行输出时程序就没有异常呢?这是因为第10个数据与第11个数据之间恰好是两个相邻的值(m每次都加2),就恰好避开了输出时的错误。