函数返回char(初学者)

时间:2015-10-13 12:44:18

标签: c char return

我想回答这个问题:

使用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,如果我以某种可怕的方式做某事或者完全误解了某些东西是如何使用的话,那就道歉了。)

5 个答案:

答案 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;                                                                                                                                       
  }                                                                            

}