我有这个任务,我们期望编写一个程序 一个正整数作为命令行参数并打印出来 最大素数大于给定数量。 不应编辑主要功能,但是,您可以创建一个 用于定义所需函数的头文件。
到目前为止,这是我想出来的,我无法找到答案 我的程序错了。感谢帮助。
主要功能:我无法编辑主功能,但是,您可以创建标题
#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);
}
}
}
}
错误讯息:
答案 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');