不受欢迎的输出c程序

时间:2012-12-17 20:10:53

标签: c io printf

我编写了一个程序,它将两个整数(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个数字,但在它应该完成之后。我很困惑。提前谢谢。

2 个答案:

答案 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设置为不同的值(逐个减去),因此每行产生不同数量的条目(逐一减去)。