不兼容的指针编译器错误

时间:2016-04-05 02:38:20

标签: c

我有这个任务,我们期望编写一个程序 一个正整数作为命令行参数并打印出来 最大素数大于给定数量。 不应编辑主要功能,但是,您可以创建一个 用于定义所需函数的头文件。

到目前为止,这是我想出来的,我无法找到答案     我的程序错了。感谢帮助。

主要功能:我无法编辑主功能,但是,您可以创建标题

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

需要的函数在slow-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

1 个答案:

答案 0 :(得分:0)

你有:

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

您正在使用以下方法调用该函数:

if (get_number(argv[1], &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可能不合适。当atoi无法将字符串转换为0时,int会返回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); } 是有效号码,您可以使用:

nlapiLogRecord('customrecord_foo');