2017-05-29 6 views
0
void main(void) 
{ 
    int i; 
    for(i=1;i<=5;i++) 
    { 
     if(i/5) 
      continue; 
     printf("%d",i); 
    } 
} 

「if」内の条件が小数点で評価された場合、0と扱われますか?ここでは出力は1234なので、条件が1/5,2/5,3/5,4/5はiの値をprinntingし、5/5 = 1のときcontinue文を実行します。if文内の条件が小数である場合

+1

整数除算*ルールとは何ですか? –

+2

'i/5'は整数除算(浮動小数点オペランドなし)なので、結果は切り捨てられます(小数部分は破棄されます)。 – HolyBlackCat

+0

分割操作に関することだけを知りたいのであれば、なぜ「内部条件」について何か質問しているのですか?部門は他の場所でも同じように行われます。 – Gerhardh

答えて

6

i/5は、(ifなどに表示されていても)整数除算(iがもちろんintの場合)として扱われます。したがって、2つの整数の間の/は実際にあなたに商を与えます。

i/5は、i ∈ {0, 1, 2, 3, 4}1の場合、i = 5の場合、0となります。その条件式trueとき

if文(この場合continue文)条件文を実行します。整数値は、次のようにブール値にキャストされます。ゼロはfalseになり、それ以外の値はtrueになります。式はi==5まで非ゼロ値に評価されないため、条件文はそれまで実行されません。 exprが何かに評価されるのであれば

if((expr) != 0) 

+0

"ゼロは真となり、他の値は偽になります" - あなたはその逆を意味していないと確信していますか? –

+0

@GovindParmarはい本当にありがとう – bolov

2

あなたは

if (expr) 

exprがあるときは明らかに真/偽だものではありません、あなたは常にこのように考えることができ分数、分数が0に等しくない限り、条件は真と評価されます。

ただし、iは整数なので、i/5は分数を決して与えない整数除算を行います。 iが5未満の場合、i/5は0になり、条件付きの偽になります。

関連する問題