我试图回答这个问题:函数返回一个char(初级)
编写给出一个整数,n
功能,通过主要方法,其中1 ≤ n ≤ 9999
并打印无论是甚至,奇,或/和素数。以下列方式书写你的答案:
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)));
}
但我得到的错误信息返回时将指针整数,未对return语句铸造在BoolToString函数中。
我不明白我在这里做错了什么? 非常感谢。
(我才开始下约2个星期前如此道歉,如果我在一个可怕的方式或完全误解的东西是如何使用做了什么。)
你宣布结果作为字符指针和BoolToString函数的返回类型为char。因此,它显示错误 – mrg
只需将返回类型更改为'char * BoolToString()'。如果你想结合两个布尔值,使用'&&',并直接使用bool值:'if(prime == false,even == true)'应该是if(!prime && even)'。 (“如果不是素数和偶数”。)在这种情况下,逗号是一个返回第二个表达式的值的运算符,因此第一个测试完全被忽略。有趣的错误不会产生错误甚至警告,是吗? –
然后尝试聪明一点,如何结合构建模块的答案字符串,并在战略位置插入“不”,具体取决于两个条件。查看字符串操作metods strcat和strcpy及其返回值.--只需组合列出每个组合,感觉非常算术化:-)。试想一下,你还想输出数字的位数...... –