1

私は論理積演算子と少し混同しています。これらの2行のコードがあります。ここnumjは両方ともintです。両方の条件が満たされている状況がありますが、の値が出力されない理由がわかりませんj。誰かが間違いを指摘できますか?前もって感謝します。

if(k==1 && num%j==0)
    printf("%d",j);
4

6 に答える 6

6

平易な英語では、式が真となるのは、 が 1等しく、 で割った余りが0 でk == 1 && num % j == 0ある場合に限られます。これ以上は言えません。knumj

于 2010-08-16T18:48:48.420 に答える
1

ここには 2 つの可能性があります。printfに到達しないか、出力が到達しないかのいずれかです。

最初のケースでは、あなたはそれを確信していますk == 1num % j == 0?テストで実際の数値を提供すると役立つ場合があります。kが計算の結果である浮動小数点数である場合、1.0 からわずかにずれている可能性があり、条件が false を返すことに注意してください。

2 番目のケースでは、これをどのようにテストしていますか? の値が出力されるはずですがj、出力がフラッシュされないため、プログラムが異常終了したり、プログラムの最後でコンソールが消えたりすると、表示されない場合があります。コンソールまたは端末に出力が表示されることを確認してprintf("%d\n", j);ください。fflush(stdout);

于 2010-08-16T18:49:49.713 に答える
0

また、かっこを自由に使用する習慣を身に付ける必要があります、imo:

if(k == 1 && (num % j == 0))

少なくとも。

于 2010-08-16T20:59:02.683 に答える
0

また、else ステートメントを追加することもできます。これが私に何回起こったか数えられません。少なくともコーディングの初期段階では、これは良い習慣です。これを行う:

これは問題をキャッチするのに役立ちます

if(k==1 && num%j==0)
    printf("%d",j);
else {
   printf("%d \n",k);
   printf("%d \n",num);
   printf("%d \n",j);
   printf("%d \n",(num%j));
} 
于 2010-08-16T19:13:28.000 に答える
0

条件が真の場合、コードに問題はありません。

ここで出力を確認してください。

于 2010-08-16T18:53:11.827 に答える
0

あなたのコードは問題なく動作します。このテストケースを見てください:

http://ideone.com/1gz8R

したがって、問題はこれらの 2 行にはありません。これらの行に入る直前に、関連する 3 つの値を印刷してみてください。表示される (または表示されない) ことに驚くかもしれません。

于 2010-08-16T19:22:00.820 に答える