2017-06-17 3 views
-1

関数によって2つの数値の間に素数を印刷するWAP。2つの数値の間に素数を印刷するこのプログラムでは、コンパイラは「パラメータaとnは決して使用されない」という警告を出しています。

#include<stdio.h> 
#include<conio.h> 
int primenumbers(int a,int n); 
void main() 
{ 
    int a,n,result,i,f; 
    clrscr(); 
    printf("enter the starting element and ending element"); 
    scanf("%d%d",&a,&n); 

aとnの間に素数を印刷したいとします。

for(i=a;i<=n;i++) 
    { 
     f=primenumbers(a,n); 
     if(f==0&&n!=1) 
      printf("%d is prime",i); 
    } 
    getch(); 
} 

int primenumbers(int a, int n) 
{ 
    int i,j,f; 
    for(j=2;j<=(i/2);j++) 
    { 
     if(i%j==0) 
     { 
      f=1; 
      break; 
     } 
    } 
    return f; 
} 
  • エラーパラメータaが
  • エラーパラメータを使用されることはありませんN
+3

このエラーメッセージは、かなり明確なようです。 'primeNumbers'関数では、パラメータ' a'もパラメータ 'n'も使用されません。 – InternetAussie

+0

'primenumbers()'関数は関数内で 'a'と' n'という2つの引数をとります。しかし、関数内のコードは決して 'a'または' n'を使用しません。したがって警告です。あなたの機能は、何をするように言われているかには何の注意も払っていません。 'printf()'書式文字列を改行で終わらせるべきであることに注意してください。 –

+0

また、あなたは 'primenumbers'関数で' i'を使用しています。これは初期化されていない変数です*また、コンパイラはあなたに警告しているかもしれません。その関数の 'i'は' main'のものとは異なる* iです。 'main'は' a'と 'n'の間でループしているので、関数は' int primenumbers(int i) 'でなければならず、他の' int i'宣言を削除することをお勧めします。あなたはそれを 'f = primenumbers(i);で呼び出すでしょう。 –

答えて

0

を使用されることはありません機能がaをパラメータとnが使用されていないので、あなたは、単に警告を受けます関数内にあります。

コードには基本的な誤解があります。 mainにループがあり、aからnになります。iをカウンタ変数として使用しています。ただし、primenumbersに電話するときは、iの代わりにanを使用して呼び出します。

私は関数がを受け取り、という数値を受け取って、その数値が素数かどうかを返すはずです。だから、mainでの呼び出しは、次のようになります。

for(i=a;i<=n;i++) 
{ 
    f=primenumbers(i); // Notice i instead of a and n 
    if (f==0 && n!=1) 
     printf("%d is prime",i); 
} 

次に、あなたが同様にあなたの関数を変更する必要があります。

int primenumbers(int number) 
{ 
    int j; 
    int f = 0;  // Remember to initialize f 

    for(j=2; j<=(number/2); j++) // Notice the use of number 
    { 
     if (number % j == 0)  // Notice the use of number 
     { 
      // Not a prime 
      f=1; 
      break; 
     } 
    } 

    return f; 
} 

上記のコードにはいくつかの改善点があります。

あなたはmain

if (f==0 && n!=1) // It is a bad idea to let main check for 1 
         // the function should handle all numbers 
         // 
         // Further it is unusual to return the value 
         // 0 for TRUE. Normally we use 1 for true 

にこのコードを持っているので、メインなどを変更します。エラーメッセージが行くように

for(i=a;i<=n;i++) 
{ 
    if (primenumber(i)) 
     printf("%d is prime",i); 
} 

と機能

// This function returns 1 if number is a prime, otherwise it returns 0 
int primenumber(int number) 
{ 
    int j; 

    if (number < 2) return 0; // Not a prime 

    for(j=2; j<=(number/2); j++) 
    { 
     if (number % j == 0)  
     { 
      // Not a prime 
      return 0; 
     } 
    } 

    // It is a prime 
    return 1; 
} 
関連する問題