私は論理積演算子と少し混同しています。これらの2行のコードがあります。ここnum
とj
は両方ともintです。両方の条件が満たされている状況がありますが、の値が出力されない理由がわかりませんj
。誰かが間違いを指摘できますか?前もって感謝します。
if(k==1 && num%j==0)
printf("%d",j);
私は論理積演算子と少し混同しています。これらの2行のコードがあります。ここnum
とj
は両方ともintです。両方の条件が満たされている状況がありますが、の値が出力されない理由がわかりませんj
。誰かが間違いを指摘できますか?前もって感謝します。
if(k==1 && num%j==0)
printf("%d",j);
平易な英語では、式が真となるのは、 が 1に等しく、 で割った余りが0 でk == 1 && num % j == 0
ある場合に限られます。これ以上は言えません。k
num
j
ここには 2 つの可能性があります。printf
に到達しないか、出力が到達しないかのいずれかです。
最初のケースでは、あなたはそれを確信していますk == 1
かnum % j == 0
?テストで実際の数値を提供すると役立つ場合があります。k
が計算の結果である浮動小数点数である場合、1.0 からわずかにずれている可能性があり、条件が false を返すことに注意してください。
2 番目のケースでは、これをどのようにテストしていますか? の値が出力されるはずですがj
、出力がフラッシュされないため、プログラムが異常終了したり、プログラムの最後でコンソールが消えたりすると、表示されない場合があります。コンソールまたは端末に出力が表示されることを確認してprintf("%d\n", j);
ください。fflush(stdout);
また、かっこを自由に使用する習慣を身に付ける必要があります、imo:
if(k == 1 && (num % j == 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));
}
条件が真の場合、コードに問題はありません。
ここで出力を確認してください。
あなたのコードは問題なく動作します。このテストケースを見てください:
したがって、問題はこれらの 2 行にはありません。これらの行に入る直前に、関連する 3 つの値を印刷してみてください。表示される (または表示されない) ことに驚くかもしれません。