0

&& 演算子が true を返すときと false を返すときに数値を出力するプログラムを実行しようとしています。コードは次のとおりです。

#include <stdio.h>
main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("Part I\n");
printf("(a%2 == 0) && (b%2 == 0): %d\n",(a%2 == 0) && (b%2 == 0));
printf("(a%3 == 0) && (b%3 == 0): %d\n",(a%3 == 0) && (b%3 == 0));
printf("(a%5 == 0) && (b%5 == 0): %d\n",(a%5 == 0) && (b%5 == 0));
printf("(a%7 == 0) && (b%7 == 0): %d\n",(a%7 == 0) && (b%7 == 0));
printf("Part II\n");
printf("The AND operator yields: %d\n",(a%2 == 0) && (b%2 == 0));
printf("The AND operator yields: %d\n",(a%3 == 0) && (b%3 == 0));
printf("The AND operator yields: %d\n",(a%5 == 0) && (b%5 == 0));
printf("The AND operator yields: %d\n",(a%7 == 0) && (b%7 == 0));

return 0;
}

出力 (私の入力と共に) は次のとおりです:-

210
210
Part I
(a%2 == 0) && (b%2 == 0): %d
(a%2 == 0) && (b%2 == 0): %d
(a%2 == 0) && (b%2 == 0): %d
(a%2 == 0) && (b%2 == 0): %d
Part II
The AND operator yields: 1
The AND operator yields: 1
The AND operator yields: 1
The AND operator yields: 1

なぜ最初の部分はそのような方法で動作するのですか? これは、&& を || に置き換えても発生します。Borland C++ Compiler 5.5 を使用しています。助けてください。

4

3 に答える 3

4

を実際に表示したい場合は、フォーマット文字列で%それを別の でエスケープする必要があるためです。例えばprintf%

printf("(a%%2 == 0) && (b%%2 == 0): %d\n",(a%2 == 0) && (b%2 == 0));
          ^              ^
于 2013-01-12T20:28:51.680 に答える
0

gcc を使用していると思われるhttp://codepad.org/でこれをテストしたところ、コードは正常に機能しました。%しかし、リテラルの前にエクストラ%(つまり)を追加しようとするかもしれません%%。これにより、コンパイラは、その後に続く % が実際の文字であることを認識します。このような:

printf("Part I\n");
printf("(a%%2 == 0) && (b%%2 == 0): %d\n",(a%2 == 0) && (b%2 == 0));
printf("(a%%3 == 0) && (b%%3 == 0): %d\n",(a%3 == 0) && (b%3 == 0));
printf("(a%%5 == 0) && (b%%5 == 0): %d\n",(a%5 == 0) && (b%5 == 0));
printf("(a%%7 == 0) && (b%%7 == 0): %d\n",(a%7 == 0) && (b%7 == 0));
于 2013-01-12T20:37:45.190 に答える
0

%実際には、最初の部分で印刷するために不正なエスケープ シーケンス文字を使用しています。それがprintfがガベージ値を生成している理由です。

printf("(a%2 == 0) && (b%2 == 0): %d\n",(a%2 == 0) && (b%2 == 0));
              ^^
      ここはあなたが間違っています

次のようになるはずです

printf("(a%%2 == 0) && (b%%2 == 0): %d\n",(a%2 == 0) && (b%2 == 0));  

C で使用されるすべての書式指定子について読むこともできます。

于 2015-05-25T03:49:44.073 に答える