2015-10-13 75 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.