2017-06-03 18 views
0

素数を与えていません。以下のプログラムをコンパイルすると、エラーを出すことなくコンパイルされます。 Eclipseのテキストエディタウィンドウには警告やエラーは表示されませんが、コンパイルすると「エラーが必要なプロジェクトに存在します」というメッセージが表示されます。ここでCプログラムは、私はUbuntuのメイトにEclipseをインストールしている

は私のコードです:

#include <stdio.h> 
int main(){ 
int a,b,num,div,exi; 
printf("this program find out the prime numbers\nnow enter the number until you want to find prime numbers here:- "); 
scanf("%d",&b); 


for(num=1;num<=b;num++) 
{ 
    for(div=2;div<=(num/2);div++) 
    { 
    a=num%div; 
    if(a!=0) 
    { 
     continue; 
    } 
    else 
    { 
     printf("%d \n",num); 
     break; 
    } 
    } 
} 



printf("enter any digit to exit"); 
scanf("%d",&exi); 
printf("you entered the %d,thus good bye",exi); 
} 

と、私は「はい」ボタンを打ったとき、それは私に次のような出力が得られます。

this program find out the prime numbers 
now enter the number until you want to find prime numbers here:- 20 
4 
6 
8 
9 
10 
12 
14 
15 
16 
18 
20 
enter any digit to exit7 
you entered the 7,thus good bye 

これは私が欲しいの出力ではなく、Eclipseのdoesnの私のプログラムのエラーが解決できるように私に教えてください。また、私のコードに何が間違っているのか教えてください。

+0

エラーは任意のものになることができます。それは私のためにうまくコンパイルされます。 – kabanus

+0

@ kabanusなぜ日食が私にそれを示していないのですか? –

+0

@kabanusとエラーは何ですか? –

答えて

1

Eclipseはは、プログラムが動作しないことを伝えることはできません。あなたのコードをプログラムにコンパイルできないかどうかだけを伝えることができます。

あなたのコードは、すべてのエラーを与えることはありませんので、日食でコンパイルすることができます。

しかし、それは素数を印刷しないようので、あなたのプログラムが動作しません。

はのは、あなたの内側のループを見てみましょう:

for(div=2;div<=(num/2);div++) // Here you want to test if num can be divided 
           // by 2 or 3 or 4 or ..... 
           // That is fine 
    { 
    a=num%div;     // So here you do the check, i.e. you calculate 
           // the reminder 
    if(a!=0) 
    { 
     // Reminder is non-zero. That will happen for e.g. 5%2 (which is 1) 
     // So you continue the loop if num is a prime candidate 
     continue; 
    } 
    else 
    { 
     // Reminder is zero. That will happen for e.g. 4%2 
     // So you print the numbers that are NOT primes and stop the loop 
     printf("%d \n",num); 
     break; 
    } 
    } 

だから、最後に、あなたのプログラムが何をしたいの反対を行います。すべての非素数を出力し、素数を無視します。

だから、周りで切り替えると、あなたはすべての値を確認するまでは印刷されません!したがって、内側のループでフラグを使用し、外側のループで印刷します。

のような何か:

#include <stdio.h> 
int main() 
{ 
    int a,b,num,div,exi; 
    printf("this program find out the prime numbers\nnow enter the number until you want to find prime numbers here:- "); 
    scanf("%d",&b); 


    for(num=2;num<=b;num++) // Start from 2 
    { 
     int flag = 1; // Assume prime 
     for(div=2;div<=(num/2);div++) 
     { 
      a=num%div; 
      if(a==0) 
      { 
       flag = 0; // No - not a prime 
       break; 
      } 
     } 
     if (flag) // Was it a prime? 
     { 
      printf("%d \n",num); // Yes 
     } 
    } 



     printf("enter any digit to exit"); 
     scanf("%d",&exi); 
     printf("you entered the %d,thus good bye",exi); 
    } 

注意:私は、問題のコードに似たこの回答にコードを維持しようとしました。ただし、このコードはいくつかの点でパフォーマンスを向上させることができます。 SOだけで "プライム"を検索すれば、より最適なソリューションを見つけることができます。必ずしもあなたのコードに関連していない - プロジェクト内

+0

私のプログラムで何が間違っているのか教えてください。私はプログラミングが初めてです。 –

+0

お待ちしております。 –

+1

@linuxman - updated - それが願って – 4386427

関連する問題