2016-04-05 29 views
0

の正の整数をコマンドライン引数として使用し、指定された数よりも小さい最小の素数 を出力するプログラムを作成する予定のこの割り当てがあります。 主な機能は、しかし、あなたが必要な機能を定義するための ヘッダファイルを作成することができ、編集しないでください。互換性のないポインタコンパイラエラー

これまでのところ私が思いついたのは、私のプログラムでは が間違っていることが分かりません。ヘルプは高く評価されます。

主な機能:私は主な機能を編集することはできません、しかし、あなたはヘッダを作成することができます

#include "slow-prime.h" 

int main(int argc, char *argv[]) { 
    int num; 
    int nxt;enter code here 
    int ret = EXIT_FAILURE; 

    if (argc < 2) { 
     printf("error: missing command line argument\n"); 
     goto ERROR; 

    if (get_number(argv[1], &num)) { 
      printf("error: %s not a number\n", argv[1]); 
      goto ERROR; 
     } 

     next_prime(num, &nxt); 
     printf("%d\n", nxt); 
     ret = EXIT_SUCCESS; 
    ERROR: 
     return ret; 
    } 
} 

必要な機能がスローprime.h

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


// define true and false 
#define true 1 
#define false 0 

// check whether the numer is prime or mnot 
int isPrime(int num){ 
    if (num < 2) { 
     return false; 
    } 
    for (int i = 2; i <= num/i; i++) { 
     if (num % i == 0) { 
      return false; 
     } 
    } 
    return true; 
} 

// get number 
void get_number(char *argv[], int num) { 
    num = atoi(argv[1]); 
} 

// loop through the numbers/ and pick the one 

void next_prime(int num, int next){ 

    for(int i = 2; i < 80; i++){ 
     if (isPrime(i) == true){ 
      next = i; 

      if (next > num) { 
       return exit(0); 
      } 
     } 
    } 
} 

エラーメッセージで作成されています:

error

答えて

0

あなたは持っている:

0あなたは両方の引数のための間違った種類を渡している

if (get_number(argv[1], &num)) { 

void get_number(char *argv[], int num) { 

は、あなたが使用して関数を呼び出しています。

argv[1]は、char*です。 &numはタイプint*です。

私はあなたが使用することをすべきだと思う:

void get_number(char *arg, int *num) { 

と少し実装を変更します。

void get_number(char *arg, int *num) { 
    *num = atoi(arg); 
} 

また、get_number戻りvoidは、あなたがif文の条件付きで使用することはできませんことを考えます。戻り値の型を他の値、例えばintに変更する必要があります。その場合、atoiを使用すると適切でない可能性があります。 atoiintに文字列を変換できない場合は0を返します。 0あなたのための有効な値であれば、atoiは良い選択ではありません。ただし、すべての場合にsprintfを使用できます。

0が有効な数値でない場合は、あなたが使用することができます。

int get_number(char *arg, int *num) { 
    *num = atoi(arg); 
    return *num; 
} 

0が有効な数値である場合は、あなたが使用することができます。

int get_number(char *arg, int *num) { 
    return (sprintf(arg, "%d", num) == 1); 
} 
+0

私はあなたのコメントを踏襲していると私はすることができました(get_number(argv [1]、&num)){ – ab141

+0

@ ab141、戻り値が期待されるときに私には分かりません'get_number'は' false'に、 'true'には評価されます。 –