#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
的第一个参数。其余的将被替换。所以前两个参数应该组合成一个字符串。其次,您使用 %d
在 int
处打印,但 inputarray
是一个 char
数组。您应该改为传入 c
,这是您要打印的整数值。
printf("%d is a prime", c);
...
printf("%d not prime", c);
我是一名优秀的程序员,十分优秀!