1

我编写了一个程序,它以两个整数(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   

正如你所看到的,第一行只打印了九个数字,但在它之后是它应该做的。我很困惑。提前致谢。

4

2 回答 2

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;
       }
    }
}
于 2012-12-17T20:16:16.950 回答
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为不同的值(减一),因此每行产生不同数量的条目(减一)。

于 2012-12-17T20:14:46.537 回答