【问题标题】:function returning a char (beginner)返回字符的函数(初学者)
【发布时间】:2016-01-11 05:26:13
【问题描述】:

我正在尝试回答这个问题:

编写一个函数,通过 1 ≤ n ≤ 9999 的 main 方法给定一个整数 n 并打印它是 evenodd 还是/和素数。将您的答案写在以下表格中:
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 make integer from pointer without a cast

我不明白我在这里做错了什么? 非常感谢。

(我大约 2 周前才开始使用 C 语言,如果我以可怕的方式做某事或完全误解了某事的使用方式,我深表歉意。)

【问题讨论】:

  • 您将结果声明为字符指针,并且 BoolToString 函数的返回类型为 char。所以,它显示错误
  • 只需将返回类型更改为char *BoolToString()。如果你想组合两个布尔值使用&amp;&amp;,并直接使用布尔值:if (prime == false, even == true) 应该是if (!prime &amp;&amp; even) 。 (“如果不是素数和偶数”。)在这种情况下,逗号是返回第二个表达式的值的运算符,因此第一个测试被完全忽略。不会产生错误甚至警告的有趣错误,不是吗?
  • 然后根据这两个条件,尝试巧妙地结合构建块中的答案字符串以及在关键位置插入“not”。查看字符串操作方法 strcat 和 strcpy 及其返回值。-- 只是组合地列出每个组合感觉如此非算法:-)。试想一下,您还想输出位数...

标签: c char return


【解决方案1】:

你必须使用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";
  }

}

您还必须在printf 中的main 函数中使用%s 而不是%c

【讨论】:

    【解决方案2】:

    您的函数的返回类型为char,而您正试图返回const char*(因为字符串文字是不可变的)。该错误表示您正在尝试将指针转换为数字,这不是您想要的。

    只需将您的函数更改为返回const char* 即可。

    【讨论】:

      【解决方案3】:
      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.
      

      【讨论】:

        【解决方案4】:

        您将函数的返回显示为 char,但您的 return 语句返回一个指向 char 的指针,这不是同一件事。

        【讨论】:

          【解决方案5】:

          试试这个:

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

          【讨论】:

          • result的类型不应该是const char*吗?
          猜你喜欢
          • 1970-01-01
          • 2011-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          相关资源
          最近更新 更多