0
/* Program Print Prime Numbers */
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main()
{
    int *primes=NULL;
    int trial=0;
    bool found=false;
    size_t total=0;
    size_t count=0;

    printf("\nHow many primes would you like?\n");
    scanf("%d",&total);
    total=(total<4?4:total);
    printf("%d",total);

    primes= (int*)malloc(total*sizeof(int));
    if(primes==NULL)
    {
        printf("\nNot enough memory\n");
        return 1;
    }

    *primes=2;
    *(primes+1)=3;
    *(primes+2)=5;
    count=3;
    trial=5;

    while(count<total);
    {
        trial+=2;
        for(size_t i=0;i<count;i++)
            if(!(found=(trial % *(primes+i)))) 
                if(found)
                  *(primes+count++)=trial;
    }

    for(size_t i=0;i<total;i++)
    {
        if(!(i%5))
          printf("\n");
        printf("%d",*(primes+i));
    }
    printf("\n");

    return 0;
}

これは、C プログラミングを学ぶために使用する本の C プログラムです。このプログラムは動作しません。「合計」変数を入力する必要がある場合、プログラムは値の入力を続けます。いくつの素数が欲しいですか? 4 5 10 ... このように

4

4 に答える 4

0

問題は、一部の人が示唆したとおりではありませんscanf()enterこれはfflush、最初のprintf.

私はあなたのコードのソースを見つけましたが、breakすべての違いをもたらす少し重要なことを忘れていました:

while(count<total)
{
    trial+=2;
    for(size_t i=0;i<count;i++)
        if(!(found=(trial % *(primes+i))))
            break;  // <-------------------- HERE.
        if(found)
            *(primes+count++)=trial;
}

whileまた、示唆されているように、節の開始の後にセミコロンを付けるべきではありません。

于 2013-10-09T11:31:47.017 に答える