我想回答这个问题:
使用n
的主方法编写一个给定整数1 ≤
n ≤ 9999
的函数,并打印它是否偶数,奇数 ,或/和 prime 。在表格中写下你的答案:
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语句中得到错误消息 return使用指针生成整数。
我不明白我在这里做错了什么? 非常感谢。
(我大约2周前才开始使用C,如果我以某种可怕的方式做某事或者完全误解了某些东西是如何使用的话,那就道歉了。)
答案 0 :(得分:6)
您必须使用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";
}
}
会更好,因为字符串文字是不可修改的。
%s
您还必须在%c
函数的printf
中使用main
代替{{1}}。
答案 1 :(得分:1)
您的函数的返回类型为char
,并且您尝试返回const char*
(因为字符串文字是不可变的)。该错误意味着您正在尝试将指针转换为数字,这不是您想要的。
只需更改您的功能即可返回const char*
,这将是正确的。
答案 2 :(得分:1)
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.
答案 3 :(得分:0)
您将函数作为char显示返回,但是您的return语句返回一个指向char的指针,该指针不是同一个东西。
答案 4 :(得分:0)
请改为尝试:
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;
}
}