2016-04-05 16 views
0

Ich habe diese Aufgabe, wo wir ein Programm erwartet, das eine positive ganze Zahl als ein Befehlszeilenargument nimmt und die kleinste Primzahl größer als die angegebene Zahl druckt. Die Hauptfunktion sollte nicht bearbeitet werden. Sie können jedoch eine Header-Datei zum Definieren der benötigten Funktionen erstellen.Inkompatibler Zeiger Compilerfehler

Bis jetzt ist das, was ich gefunden habe, ich kann einfach nicht herausfinden, was mit meinem Programm falsch ist. Hilfe wird geschätzt.

Hauptfunktion: Ich kann die Hauptfunktion nicht ändern, aber Sie einen Header

#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; 
    } 
} 

benötigten Funktionen in der langsam prime.h werden schaffen können

erstellt
#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); 
      } 
     } 
    } 
} 

Fehlermeldung :

error

Antwort

0

Sie haben:

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

und Sie rufen die Funktion mit:

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

Du die falschen Typen für beide Argumente.

argv[1] ist vom Typ char*. &num ist vom Typ int*.

Ich glaube, Sie sollten verwenden:

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

und die Umsetzung leicht ändern.

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

Auch da get_number kehrt void, Sie es nicht in der bedingten einer if Anweisung verwenden können. Sie müssen den Rückgabetyp auf etwas anderes ändern, vielleicht eine int. In diesem Fall ist die Verwendung von atoi möglicherweise nicht geeignet. atoi gibt 0 zurück, wenn es die Zeichenfolge nicht in int konvertieren kann. Wenn 0 ein gültiger Wert für Sie ist, dann ist atoi keine gute Wahl. Sie können jedoch sprintf für alle Fälle verwenden.

Wenn 0 keine gültige Zahl ist, können Sie verwenden:

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

Wenn 0 eine gültige Zahl ist, können Sie verwenden:

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

ich Ihre Kommentare gefolgt haben, und ich war in der Lage zu loswerden aller Fehler bis auf eine: Anweisung erfordert Ausdruck des Skalartyps ('ungültig' ungültig) if (get_number (argv [1], & num)) { – ab141

+0

@ ab141, es ist mir nicht klar, wann Sie den Rückgabewert erwarten von 'get_number' zu 'false' und wann zu 'true'. –

Verwandte Themen