我编写了一个程序,它将两个整数(m和n)作为输入,然后将它们之间的所有素数写入文件。我希望输出看起来整洁,所以我使用字段宽度修改器打印每个数字7个空格宽,每行只打印10个。除了第一行之外,输出是预期的,其中仅打印9个数字 这是代码:
#include <stdio.h>
#include <math.h>
#define SIZE 100000000
char primes[SIZE];
void seive(void)
{
int i, j;
primes[1] = primes[0] = 1;
for (i=3;i<=sqrt(SIZE);i+=2)
if (primes[i] == 1)
continue;
else
for (j=i*i;j<SIZE;j+=2*i)
primes[j] = 1;
}
int main()
{
int n, m, count;
FILE *fp;
fp = fopen("test.txt", "w");
seive();
scanf("%d %d", &m, &n);
count = 0;
if (m <= 2) {
fprintf(fp, "%7d ", 2);
count++;
}
if (!(m & 1))
m++;
for (m;m<=n;m+=2) {
if (!primes[m]) {
count++;
if (count == 10) {
fprintf(fp, "\n");
count = 0;
}
fprintf(fp, "%7d ", m);
}
}
return 0;
}
这是输入1 300的输出:
2 3 5 7 11 13 17 19 23
29 31 37 41 43 47 53 59 61 67
71 73 79 83 89 97 101 103 107 109
113 127 131 137 139 149 151 157 163 167
173 179 181 191 193 197 199 211 223 227
229 233 239 241 251 257 263 269 271 277
281 283 293
正如您所看到的那样,第一行上只打印了9个数字,但在它应该完成之后。我很困惑。提前谢谢。
答案 0 :(得分:2)
我认为这与您在循环中打印输出之前打印换行符有关。
将其更改为:
for (m;m<=n;m+=2) {
if (!primes[m]) {
count++;
fprintf(fp, "%7d ", m);
if (count == 10/*&& you're going to print more numbers*/) {
fprintf(fp, "\n");
count = 0;
}
}
}
答案 1 :(得分:1)
count = 0;
if (m <= 2) {
fprintf(fp, "%7d ", 2);
count++;
}
这将开始一行,打印一个条目,并将count
增加到1。
if (!primes[m]) {
count++;
if (count == 10) {
fprintf(fp, "\n");
count = 0;
}
fprintf(fp, "%7d ", m);
这会开始一行,打印一个条目,并将count
设置为零。
由于两个代码段将count
设置为不同的值(逐个减去),因此每行产生不同数量的条目(逐一减去)。