函数返回一个char(初级)
问题描述:
我试图回答这个问题:函数返回一个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个星期前如此道歉,如果我在一个可怕的方式或完全误解的东西是如何使用做了什么。)
答
你必须使用char*
返回类型返回的char*
数据。
此外,在这种情况下使用const char*
更好,因为字符串文字是不可修改的。
const char *BoolToString(bool prime, bool even)
{
if (prime == true && even == true)
{
return "is even and prime";
}
else if (prime == true && even == false)
{
return "is odd and prime";
}
else if (prime == false && even == true)
{
return "is even and not prime";
}
else if (prime == false && even == false)
{
return "is odd and prime";
}
else
{
return "error";
}
}
您还可以在main
功能使用%s
代替%c
在printf
。
答
您的函数返回类型为char
,并且您试图返回const char*
(因为字符串文字是不可变的)。该错误意味着您正试图将指针转换为数字,这不是您想要的。
只是改变你的功能返回const char*
它将是正确的。
答
您将函数的返回值显示为char,但返回语句返回的指针与char不同。
答
试试这个:
const char *BoolToString(bool prime, bool even)
{
if (prime && even)
{
const char* result = "is even and prime";
return result;
}
else if (prime && !even)
{
const char* result = "is odd and prime";
return result;
}
else if (!prime && even)
{
const char* result = "is even and not prime";
return result;
}
else if (!prime && !even)
{
const char* result = "is odd and prime";
return result;
}
else
{
const char* result = "error";
return result;
}
}
答
char and Char* are not same thing. char as a data stores just one character like
char x = 'c';
char* on other hand is pointer to the base address of character type array. like
char* msg ="Hello World";
Your return type should be char* because you are returning a char* type variable which contains the base address of string.
你宣布结果作为字符指针和BoolToString函数的返回类型为char。因此,它显示错误 – mrg
只需将返回类型更改为'char * BoolToString()'。如果你想结合两个布尔值,使用'&&',并直接使用bool值:'if(prime == false,even == true)'应该是if(!prime && even)'。 (“如果不是素数和偶数”。)在这种情况下,逗号是一个返回第二个表达式的值的运算符,因此第一个测试完全被忽略。有趣的错误不会产生错误甚至警告,是吗? –
然后尝试聪明一点,如何结合构建模块的答案字符串,并在战略位置插入“不”,具体取决于两个条件。查看字符串操作metods strcat和strcpy及其返回值.--只需组合列出每个组合,感觉非常算术化:-)。试想一下,你还想输出数字的位数...... –