【发布时间】:2016-01-11 05:26:13
【问题描述】:
我正在尝试回答这个问题:
编写一个函数,通过 1 ≤
n ≤ 9999 的 main 方法给定一个整数 n 并打印它是 even、odd 还是/和素数。将您的答案写在以下表格中:2 is even and prime
目前我写的代码是:
/*Lab2 ex4 */
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool IsPrime(int num)
{
int i;
for (i=2; i<num; i++)
{
if (num%i == 0)
{
return false;
}
}
return true;
}
bool IsEven(int num)
{
if (num%2 == 0)
{
return true;
}
else
{
return false;
}
}
char BoolToString(bool prime, bool even)
{
if (prime == true, even == true)
{
char* result = "is even and prime";
return result;
}
else if (prime == true, even == false)
{
char* result = "is odd and prime";
return result;
}
else if (prime == false, even == true)
{
char* result = "is even and not prime";
return result;
}
else if (prime == false, even == false)
{
char* result = "is odd and prime";
return result;
}
else
{
char* result = "error";
return result;
}
}
main()
{
printf("%d %c\n", 11, BoolToString(IsPrime(11), IsEven(11)));
}
但我在 BoolToString 函数的返回语句中收到错误消息 return make integer from pointer without a cast。
我不明白我在这里做错了什么? 非常感谢。
(我大约 2 周前才开始使用 C 语言,如果我以可怕的方式做某事或完全误解了某事的使用方式,我深表歉意。)
【问题讨论】:
-
您将结果声明为字符指针,并且 BoolToString 函数的返回类型为 char。所以,它显示错误
-
只需将返回类型更改为
char *BoolToString()。如果你想组合两个布尔值使用&&,并直接使用布尔值:if (prime == false, even == true)应该是if (!prime && even)。 (“如果不是素数和偶数”。)在这种情况下,逗号是返回第二个表达式的值的运算符,因此第一个测试被完全忽略。不会产生错误甚至警告的有趣错误,不是吗? -
然后根据这两个条件,尝试巧妙地结合构建块中的答案字符串以及在关键位置插入“not”。查看字符串操作方法 strcat 和 strcpy 及其返回值。-- 只是组合地列出每个组合感觉如此非算法:-)。试想一下,您还想输出位数...