2013-12-16 108 views
-1

我試圖做一個程序,將數除以2,只有該數可以被2整除。我這樣做,如果數除以2的結果是一個浮點數,然後除以二,像這樣:確定一個數字是否是整數?

int p; 
printf("Percentage please: "); 
scanf("%d", &p); 
while (((p/2) != // a floating point value) 
{ 
    p = p/2; 
} 

但問題是,我不知道是否有像isint()iswholenumber() C標準庫中的函數。有沒有任何功能或任何方式可以實現類似的功能? 任何幫助,將不勝感激。

+1

看一看http://en.wikipedia.org/wiki/Modulo_operation –

回答

2

您正在尋找模操作,返回分裂的休息,所以:

if(n % 2 == 1) // the number is not divisible by 2 
if(n % 2 == 0) // divisible by 2 
+0

爲模數由定義的負數C? –

+0

是的,它仍然是該部門的剩餘部分,-5%2 = -1 –

+3

__C 2011第6.5.5節第6段:__如果商a/b可表示,則表達式'(a/b)* b + a%b'應等於'a';否則,「a/b」和「a%b」的行爲都是未定義的。 –

0

當分隔兩個int S中的結果始終是一個int(編輯:截斷):

1/2 --> 0 
2/2 --> 1 
3/2 --> 1 

所以邏輯p/2 is not a float沒有意義。相反,正如其他人所說,你要使用的模運算符返回除法的餘數:

if(n % 2) // not divisible by 2 
{ 
} 
else // divisible by 2 
{ 
} 

注:由於不計算爲0的所有整數相當於true你不需要檢查n % 2 != 0

+2

它不是向下舍入,它被截斷(向上舍入負數)。 – 2013-12-16 18:57:37

+0

例如,'-3/2'值爲'-1',而不是'-2'。 –

+0

已更新。忘了負面情況。 – clcto

-2

你可以要求用戶輸入一個字符串,然後使用int.TryParse

int x; 
if (int.TryParse(inputString, out x)) 
{ 
    // input is an integer. 
} 
+1

int.TryParse不是C,並且此問題被標記爲C – Mike

+0

這是無效的C. – Kninnug

相關問題