c - 如何最有效地组合包括 checkprime 在内的功能

标签 c

#include <stdio.h>
#include <string.h>
#include <math.h>
#define FALSE 0
#define TRUE 1
......................
int checkprime ( char number )
{
    int i, valid;
    valid = TRUE;

    for ( i = 2; i <= number; i++ )
    {
        if ( number % i == 0 ) valid = FALSE;
    } 
    return valid;

}

int main(void)

{
    char inputarray[4];
    int c, primeanswer;

   ........................
    {
        primeanswer = checkprime(c);

        if ( primeanswer == 1)
        {
            printf("%d", "is a prime", inputarray);
        }
        else
        {
            printf("%d", "not prime", inputarray);
        }
    }
}    

我这里的问题是尝试让 checkprime 函数正常工作。我想我可能没有初始化某些东西,因为我得到的数字在我看来就像程序输出不正确一样。此外,当我为 checkprime 输入数据时,数字对我来说似乎是未初始化的 int 值。并且其他函数似乎没有被调用。

我没有初始化的是什么? 如何更有效地将 checkprime 功能与其他功能结合使用?是否有必要像我在函数中所做的那样在 char/int 值之间切换?

编辑:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define FALSE 0
#define TRUE 1

................
}
int checkprime ( int number )
{
int i, valid;
valid = TRUE;

for ( i = 2; i < number; i++ )
    {
        if ( number % i == 0 ) valid = FALSE;
    } 
        return valid;

}

int main(void)

{
char inputarray[4];
int c, primeanswer;
.........................

else  
{
 c = atoi(inputarray);

primeanswer = checkprime(c);

if ( primeanswer == 1)
{
    printf("%d", "is a prime", inputarray);
}
else
{
    printf("%d", "not prime", inputarray);
}
}
}

最佳答案

您正在将 c 传递给 checkprime,但您从未将其设置为任何值。因此,c 的内容是未定义的,尝试读取它会导致未定义的行为。

将您的数组传递给 atoi 函数以将其转换为整数并将其分配给 c。您还应该将 checkprime 中的 number 参数的类型更改为 int 以匹配传入的内容。

看起来您还缺少一个 else:

    if ( !checknumeric(inputarray)) 
{
    printf("Invalid input");
}
// else goes here
{
    primeanswer = checkprime(c);
    ...

编辑:

您的代码存在更多问题:

您没有正确打印结果:

printf("%d", "is a prime", inputarray);
...
printf("%d", "not prime", inputarray);

这些有两个问题。首先,要打印的字符串的固定部分是 printf 的第一个参数。其余的将被替换。所以前两个参数应该组合成一个字符串。其次,您使用 %dint 处打印,但 inputarray 是一个 char 数组。您应该改为传入 c,这是您要打印的整数值。

printf("%d is a prime", c);
...
printf("%d not prime", c);

关于c - 如何最有效地组合包括 checkprime 在内的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107994/

相关文章:

c++ - 获取内存泄漏导致的内存溢出,应用程序继续运行和分配

python - 如何通过 python-C api 将切片对象元组传递给 C

c - PJSip 拨出电话不起作用

c - BeagleBone Black UART 软件 FIFO 大小?

java - ssl 客户端如何接受过期的 SSL 证书

c - 如何从文件中读取整数到 C 中的一维数组

c - 我的问题是关于 get_next_line 函数,我应该读取一个文件并使用多个缓冲区大小

c - 使用 ncurses 获取显示中的文本

c - 没有格式说明符,在 C 中将二进制 int 数转换为十六进制

C Socket - 确定数据长度