#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。您还应该将numbercheckprime参数的类型更改为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/

10-10 19:33