我試圖回答這個問題:函數返回一個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個星期前如此道歉,如果我在一個可怕的方式或完全誤解的東西是如何使用做了什麼。)
你宣佈結果作爲字符指針和BoolToString函數的返回類型爲char。因此,它顯示錯誤 – mrg
只需將返回類型更改爲'char * BoolToString()'。如果你想結合兩個布爾值,使用'&&',並直接使用bool值:'if(prime == false,even == true)'應該是if(!prime && even)'。 (「如果不是素數和偶數」。)在這種情況下,逗號是一個返回第二個表達式的值的運算符,因此第一個測試完全被忽略。有趣的錯誤不會產生錯誤甚至警告,是嗎? –
然後嘗試聰明一點,如何結合構建模塊的答案字符串,並在戰略位置插入「不」,具體取決於兩個條件。查看字符串操作metods strcat和strcpy及其返回值.--只需組合列出每個組合,感覺非常算術化:-)。試想一下,你還想輸出數字的位數...... –