函数返回一个字符(初学者)



我在试着回答这个问题:

编写一个函数,通过main方法给定一个整数n,其中1 ≤ n ≤ 9999并打印是偶数奇数,还是/and 素数。把你的答案写在表格里:
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 %cn", 11, BoolToString(IsPrime(11), IsEven(11)));                                                                                            
}    

但是我得到错误消息返回使整数从指针没有强制转换在BoolToString函数的返回语句。

我不明白我做错了什么?多谢。

(我大约两周前才开始学习C语言,所以如果我以一种可怕的方式做了一些事情,或者完全误解了某些东西的使用方式,那么我道歉。)

必须使用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而不是printf中的%c

你的函数有一个返回类型char,你试图返回const char*(因为字符串字量是不可变的)。此错误意味着您正在尝试将指针转换为数字,而这不是您想要的。

只要改变你的函数返回const char*,它将是正确的

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.

您将函数返回显示为char,但您的return语句返回指向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;                                                                                                                                       
  }                                                                            
}

最新更新