2016-10-17 10 views
-1
#include<stdio.h> 
int main(void) 

{ 

    int i; 
    char ch; 

    /*display all numbers that are multiples of 6*/ 
    for(i=1; i<10000; i++){ 
     if(!(i%6)){ 
      printf("%d, more?(Y/N)", i); 
      ch= getche(); 
      if(ch=='N')break; /* stop the loop*/ 
      printf("\n"); 
     } 

    } 
    return 0; 
} 

プログラムの目的:プログラムは6の倍数を印刷します。そしてキーを押すとプログラムの実行を停止できます。if(!(i%6))の論理NOT演算子の処理

プログラムの動作:forループでは、システムは指定された条件に対してiの値をチェックします。 iの値が10000より小さい場合はforの下の文が実行されます。 forループの最初の文はif文です。 if文の条件が真であれば、if文のすべての文が実行されます。条件が偽になると、すべてのステートメントはスキップされます。

たとえば、i = 6の場合、forの条件がチェックされます。 true 6は100000より小さい。次にif文が実行を開始する。 statementがtrueになると、iの値はシステムによって出力されます。

私の質問:if(!(i%6))の条件の意味はどういう意味ですか?私の価値が6の倍数であるかどうかチェックする方法は?

ありがとうございます。

+0

という演算子が使用されるときは常にdo_it()が呼び出されます。 'i'が' 6'の倍数であれば 'if'本体を実行します。 'if(i%6 == 0)'と等価です。 – haccks

+1

何が働いていないのですか?なぜ(i%6 == 0)? –

+0

私はあなたが知りたいことがわかりません。 NOT演算子は 'true'から' false'へ、またその逆に切り替わります。 'false'は数字の' 0'または 'NULL'と' true'はそれ以外のものです(ほとんどが '1'ですが' 1237234'でもよい) –

答えて

0

を使用しています。数値がブール値に変換されると、0falseになり、その他の値はtrueになります。だから、

if (i % 6) 
    do_it(); 

do_it()i % 6の値がないゼロ、すなわち、6で割り切れないiの全ての値のためのものであるときはいつでも実行されます。否定の追加

は逆の結果生成:i % 60falseである残りのブール値、および否定、有効!0、真である

if (!(i % 6)) 
    do_it(); 

と、 i % 60でない場合、剰余のブール値はtrueであり、否定は偽である。従って、i % 60であるとき、すなわちiのすべての値が6であり、6の倍数に6!

+0

ありがとうございます。今は明らかです。 –

1

実際にあなたの質問が何であるかはっきりしていません。正確には理解できません。しかし、私は明確にしようとします:

if(!(i%6)){  

まず(i%6)評価され、その後はない、オペレータがパラメータとしてboolを取ることを検討する必要があります。

bool operator!(bool) 

intが、その後boolに変換されている場合は0falseになり、それ以外はtrueになります。

if(!(i%6 != 0)){ 

以下難読化ビット:!

if(0==(i%6)){ // or if ((i%6)==0){ 
+1

"yoda-speak"条件(一定の比較演算式)が見えるときに脳の一部が溶けてしまうので、あまり難読化されません。個人的には、私はそれを使いましたが、好きですが、コードレビューのコメントのために使用をやめました。 – stefaanv

+0

@stefaanvあなたは '0 ==(i%6)'を参照していますか?今週は一貫して使用する決議をしました。私自身のコードではあまり気にしませんが、私は学生とたくさんのことをしていますが、 '=='の代わりに '='を使うのはよくある間違いです。私はもちろん、代わりに警告にもっと注意を払うように教えることができます... – user463035818

+0

それは私が言及したものです。警告をエラーとして扱うフラグについても教えられます。この種の問題の次に、予期した結果を直ちに見るために 'if(OKAY == really_long_functionname_with_long_parameterlist(all_these_parameters))'を好む。 – stefaanv

0

(iは6%)を意味する。したがって、上記同等のように書くことができる!

I 0%6 == 0 ;しかし、あなたはこの条件が真実であることを望みます。

!i%6 == 1のとき1;

代わりif文は、ブール値を与える表現が必要なI%6 == 0です