2015-10-13 46 views
0

我试图回答这个问题:函数返回一个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个星期前如此道歉,如果我在一个可怕的方式或完全误解的东西是如何使用做了什么。)

+0

你宣布结果作为字符指针和BoolToString函数的返回类型为char。因此,它显示错误 – mrg

+3

只需将返回类型更改为'char * BoolToString()'。如果你想结合两个布尔值,使用'&&',并直接使用bool值:'if(prime == false,even == true)'应该是if(!prime && even)'。 (“如果不是素数和偶数”。)在这种情况下,逗号是一个返回第二个表达式的值的运算符,因此第一个测试完全被忽略。有趣的错误不会产生错误甚至警告,是吗? –

+0

然后尝试聪明一点,如何结合构建模块的答案字符串,并在战略位置插入“不”,具体取决于两个条件。查看字符串操作metods strcat和strcpy及其返回值.--只需组合列出每个组合,感觉非常算术化:-)。试想一下,你还想输出数字的位数...... –

回答

6

你必须使用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代替%cprintf

1

您的函数返回类型为char,并且您试图返回const char*(因为字符串文字是不可变的)。该错误意味着您正试图将指针转换为数字,这不是您想要的。

只是改变你的功能返回const char*它将是正确的。

0

您将函数的返回值显示为char,但返回语句返回的指针与char不同。

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

} 
+0

结果的类型是不是const char *? – MikeCAT

+0

你的权利,对此表示赞同 – Magisch

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.